6

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

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

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

4

5 回答 5

8

我会查看 MKMapView 子视图的手势识别器。它可能还在某个地方。

当然,弄乱另一个视图的 GR 有点可疑,并且可能会在下次 Apple 更改有关 MKMapView 的某些内容时中断......

编辑:为了其他阅读本文的人的利益,检查它是 aUITapGestureRecognizer和 thatnumberOfTapsRequired == 2numberOfTouchesRequired == 1.

此外,与其完全禁用地图上的双击,不如考虑在注释上添加双击 GR,然后执行[mapDoubleTapGR requireGestureRecognizerToFail:annotationDoubleTapGR]. 再次,hacky - 如果它在下一次操作系统更新时中断,请不要怪我!

于 2012-09-23T02:14:49.647 回答
4

这对我有用: [_mapView.subviews[0] addGestureRecognizer:MyDoubleTapOverrider];

于 2012-10-27T08:38:21.090 回答
1

你想让用户对视图做任何事情吗?userInteractionEnabled如果没有,设置为就足够了NO。如果是这样,您需要允许哪些特定的交互?除了双击之外的一切?为什么要禁用那个交互?

我们对您的用例了解得越多,我们可以提供的答案就越好。

于 2012-09-20T21:18:33.870 回答
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。但我想你可以指定删除任何你想要的东西。

于 2013-10-30T19:18:56.463 回答
0

您可以改用长按手势,这很有效。

于 2012-09-23T01:36:14.043 回答