禁用MKMapView(iOS 6)中的双击缩放

时间:2012-09-20 21:14:28

标签: objective-c ios ios5 mkmapview ios6

在ios 5中,我可以通过使用新的双击手势覆盖它来禁用双击缩放。但似乎双击手势不再出现在mkmapview附带的gesturerecognizer数组中。

NSArray *gestureRecognizers = [_mapView gestureRecognizers];
for (UIGestureRecognizer *recognizer in gestureRecognizers) {
    NSLog(@"%@", recognizer);
}

在ios 6中不返回任何内容,其中在ios 5中它将返回2个识别器,一个用于单击,一个用于双击。

4 个答案:

答案 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。但我想你可以指定删除你想要的任何东西。