【问题标题】:Add UITapGestureRecognizer to MKMapView separated from AnnotationView selection将 UITapGestureRecognizer 添加到与 AnnotationView 选择分开的 MKMapView
【发布时间】:2014-02-23 20:57:26
【问题描述】:

我正在创建一个 MKMapView 和一些带有 CalloutBubbles 的 AnnotationViews 等等。 现在我想添加一个UITapGestureRecognizer 以全屏模式显示地图视图,就像它在Apple 的地图应用程序中做得很好一样。我仍然创建了隐藏 NavigationBarItems 等的代码,它运行良好,但我的问题是点击手势仍在用于选择注释。因此,每次我想触摸 PinView、进行双击等时,都会执行我的代码,并且 mapview 进入全屏模式,而不是打开 calloutBubble、缩放等。

这是我的问题。是否有可能将MKMapView 背景中的点击和引脚上的点击分开?

编辑

当我使用- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 函数并单击我的地图视图的注释引脚时,我会记录以下描述:

2014-02-24 15:27:31.257 我的应用程序 [807:70b] ; target= MySetFullScreenMap, 目标=)>>

2014-02-24 15:27:31.257 我的应用程序 [807:70b] <_mkuserinteractiongesturerecognizer: uigesturerecognizer delaystouchesended="否;视图" target=")">>

2014-02-24 15:27:31.258 我的应用程序 [807:70b] ; target= MySetFullScreenMap, 目标=)>>

2014-02-24 15:27:31.258 我的应用程序 [807:70b] <_mkuserinteractiongesturerecognizer: uigesturerecognizer delaystouchesended="否;视图" target=")">>

2014-02-24 15:27:31.376 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.376 我的应用程序 [807:70b] ;目标= >

2014-02-24 15:27:31.377 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.377 我的应用程序 [807:70b] <_mkuserinteractiongesturerecognizer: uigesturerecognizer delaystouchesended="否;视图" target=")">>

2014-02-24 15:27:31.377 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.377 我的应用程序 [807:70b] ;目标= ;必须失败 = { ; 目标= ; numberOfTapsRequired = 2>, ;目标= > }>

2014-02-24 15:27:31.378 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.378 我的应用程序 [807:70b] ;目标= ; numberOfTouchesRequired = 2>

2014-02-24 15:27:31.378 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.379 我的应用程序 [807:70b] ;目标= >

2014-02-24 15:27:31.379 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.380 我的应用程序 [807:70b] ;目标= >

2014-02-24 15:27:31.380 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.380 我的应用程序 [807:70b] ;目标= ;必须失败= { ;目标= > }>

2014-02-24 15:27:31.380 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.381 我的应用程序 [807:70b] ;目标= >

2014-02-24 15:27:31.381 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.381 我的应用程序 [807:70b] ; 目标= >

2014-02-24 15:27:31.381 我的应用程序 [807:70b] ; target= MySetFullScreenMap, target=)>>

2014-02-24 15:27:31.382 我的应用程序 [807:70b] ;目标= >

在每种情况下,上面的日志是“gestureRecognizer”,下面的日志是“otherGestureRecognizer”。

我刚刚添加了一个 UILongPressGestureRecognizer 和 UITapGestureRecognizer(用于我的函数“MySetFullScreenMap”

【问题讨论】:

  • 我已经在这里发布了解决这个问题的方法stackoverflow.com/questions/17200910/…
  • @HepaKKes 我知道这种解决方案,但关键是我有很多触摸事件。如果我为“shouldRecognizeSimultaneously [...]”函数设置一个断点并在地图视图上单击一次,那么每次都会有超过三个同时发生的事件,我不知道如何在我的点击识别器和来自MKAnnotationView.
  • 让我明白一件事,你是不是给每个 MKAnnotationView 添加手势识别器?
  • 哦,不,如果不清楚,抱歉。我在地图视图中添加了一个点击手势识别器,以便将其设置为全屏(MySetFullScreenMap)。但问题是,每次我想单击 PinAnnotation、双击等时,都会执行我的函数(MySetFullScreenMap)而不是系统函数(例如打开 calloutBubble)。我希望它现在清楚了。
  • 您找到解决方案了吗? stackoverflow.com/questions/17200910/… 解决方案依赖于私有 API 的知识,该 API 可以并且已经随着时间而改变,因此它不可靠。

标签: objective-c mkmapview mkannotation uitapgesturerecognizer


【解决方案1】:

UIGestureRecognizer 类具有它所附加到的视图的属性。这可以帮助您确定被窃听的内容吗?

【讨论】:

  • 好的,谢谢!我用委托函数尝试了你的方式:- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 我得到了两个手势识别器(MKUserInteractionGestureRecognizer 和 UITapGestureRecognizer),但不幸的是,我找不到将默认值从 MKMapView 和点击注释分开的注释。有人知道解决方案吗?
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
相关资源
最近更新 更多