【发布时间】: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