在MKMapView(iOS 6)中禁用双击缩放
在ios 5中,我可以通过用新的双击手势覆盖它来禁用双击缩放。 但是似乎双击手势已经不在mkmapview附带的gesturerecognizer数组中。
NSArray *gestureRecognizers = [_mapView gestureRecognizers]; for (UIGestureRecognizer *recognizer in gestureRecognizers) { NSLog(@"%@", recognizer); }
在ios 6中没有任何返回,在ios 5中它将返回2个识别器,一个用于单击,另一个用于双击。
我会通过MKMapView的子视图的手势识别器。 它可能还在那里。
当然,搞乱另一个视图的遗传资源是有点可疑,并可能会打破下一次苹果改变一些关于MKMapView的…
编辑:为了读者的利益, 请检查它是一个UITapGestureRecognizer
和numberOfTapsRequired == 2
和numberOfTouchesRequired == 1
。
此外,不是完全禁用地图上的双击,而是考虑在注记上添加双击GR,然后执行[mapDoubleTapGR requireGestureRecognizerToFail:annotationDoubleTapGR]
。 再一次,哈西 – 不要怪我,如果它在下一个操作系统更新中断!
你想让用户对视图做任何事吗? 如果不是,则将userInteractionEnabled
设置为NO
就足够了。 如果是这样,你需要什么具体的互动? 一切只是双击? 为什么禁用这一个交互?
我们对您的用例了解得越多,我们可以提供的答案就越好。
这工作对我来说:[_mapView.subviews [0] addGestureRecognizer:MyDoubleTapOverrider];
这适用于我:
//INIT the MKMapView -(id) init{ ... [self getGesturesRecursive:mapView]; ... }
然后让recursion函数遍历子视图并findGR: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。 但我想你可以指定删除任何你想要的。
您可以使用长按手势代替,这是有效的。