美文网首页
ios多手势传递,用于页面头部悬浮滚动

ios多手势传递,用于页面头部悬浮滚动

作者: 志在交流 | 来源:发表于2019-06-24 15:33 被阅读0次

/*

  • 是否允许多个手势识别器共同识别,一个控件的手势识别后是否阻断手势识别继续向下传播,默认返回NO;如果为YES,响应者链上层对象触发手势识别后,如果下层对象也添加了手势并成功识别也会继续执行,否则上层对象识别后则不再继续传播
    */
  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
    return YES;
    }

用iOS系统的MKMapView,想在用户双击地图时做一些操作,首先我想在下面的方法中处理:

  • (void)touchesBegan:(NSSet )touches withEvent:(UIEvent)event{

YBLog(@"%s",func);

//UITouch *touch =[touches anyObject];

//NSLog(@"touch.tapCount = %i",touch.tapCount);

//if(touch.tapCount ==2) //这里无法获取双击事件,因为双击事件被mapView拦截了,准确的说时被mapview内部的UITapGestureRecognizer手势拦截了

//{

//self.view.backgroundColor = [UIColor redColor];

//}

}

然后我又给mapview添加了一个UITapGestureRecognizer手势:如下:

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(invokeGesture:)];

tap.numberOfTapsRequired=2;

tap.delegate=self;

[self addGestureRecognizer:tap];

但是发现在双击的时候根本没有调用invokeGesture:方法,为什么会这样呢?

原因是:

MKMapView内部实现时,已添加了1个UITapGestureRecognizer,而这里我们又添加了另外1个UITapGestureRecognizer,也就是说同1个MKMapView有两个相同类型的手势辨认,但是运行时内部默许相同类型的手势辨认只有1个会得到处理,所以第1段代码始终没有输出invokeGesture:。幸亏UIPanGestureRecognizerDelegate提供了gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer方法,该方法返回YES时,意味着所有相同类型的手势辨认都会得到处理。

所以解决方法如下:

//该方法返回YES时,意味着所有相同类型的手势都会得到处理。

  • (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer

shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer{

returnYES;

}

相关文章

网友评论

      本文标题:ios多手势传递,用于页面头部悬浮滚动

      本文链接:https://www.haomeiwen.com/subject/psloqctx.html