NSArray *gestureRecognizers = [_mapView gestureRecognizers];
for (UIGestureRecognizer *recognizer in gestureRecognizers) {
NSLog(@"%@", recognizer);
}
在ios 6中不返回任何内容,其中在ios 5中它将返回2个识别器,一个用于单击,一个用于双击。
答案 0 :(得分:7)
我会查看MKMapView子视图的手势识别器。它可能还在某处。
当然,弄乱另一个视图的GRs有点可疑,并且可能会在下次Apple更改MKMapView的内容时中断......
编辑:为了让其他人阅读此内容,请检查它是UITapGestureRecognizer
还是numberOfTapsRequired == 2
和{{1} }。
此外,不要在地图上完全禁用双击,而是考虑在注释上添加双击GR,然后执行numberOfTouchesRequired == 1
。再次,hacky - 如果它在下次操作系统更新时中断,请不要责怪我!
答案 1 :(得分:2)
您想让用户对视图执行任何操作吗?如果没有,则将userInteractionEnabled
设置为NO
就足够了。如果是这样,您需要允许哪些具体的互动?除了双击之外的所有东西?为什么禁用那个互动?
我们对您的用例了解得越多,我们可以提供的答案就越好。
答案 2 :(得分:2)
这对我有用: [_mapView.subviews [0] addGestureRecognizer:MyDoubleTapOverrider];
答案 3 :(得分:1)
这对我有用:
//INIT the MKMapView
-(id) init{
...
[self getGesturesRecursive:mapView];
...
}
然后让递归函数遍历子视图并找到GR:s。
-(void)getGesturesRecursive:(UIView*)v{
NSArray *gestureRecognizers = [v gestureRecognizers];
for (UIGestureRecognizer *recognizer in gestureRecognizers) {
if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) {
[v removeGestureRecognizer:recognizer];
}
}
for (UIView *v1 in v.subviews){
[self getGesturesRecursive:v1];
}
}
此示例删除所有tap-GR:s。但我想你可以指定删除你想要的任何东西。