iOS一个手势动作被多个UIGestureRecognizer识别分析

假设你现在有三个View

C层

B层

A层

View属于三层,ABC, A最底层

存在三个层次,都是父子关系。

B 是 A 的子视图,
C是 A 的子视图。

直接上个图吧

图片.png

最底下的红色就是A视图

现在给三个视图都绑定一个UIPangestureRecognizer
那么,你在任何视图里面滑动的时候,你都会触发该视图绑定的recognizer初始化时的目标方法

现在你如果想在触发C视图手势的同时,触发A的视图呢?
可以的 需要两步
第一步,设置PanA的delegate
第二步,实现

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

这样子,你在C 视图里面拖动的时候,A和C的手势都会被触发。
同时,你如果在B视图里面拖动的时候,AB的手势也会被触发。

本来一个手势发生,如果多个视图中有识别器可以捕获他,他会被视图层级属于最低的(最后添加的)识别器处理,而你只要把这个返回值设置为YES,那么只要有对应的手势发生在这个视图上,无论有没有其他的视图要识别这个事件。

但这里有个限制,就是最多只能同时一个手势被两个视图识别,如果你想一个手势被三个视图识别,那么你需要把上面的代理实现两遍,至于为什么,可以想一想,或者用手机去模拟一下,网上关于这方面的文章不多,这个跟那个 传递链和响应者链的 关系不太一样。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • -- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实...
    翘楚iOS9阅读 3,014评论 0 13
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,059评论 0 13
  • 在开发过程中,大家或多或少的都会碰到令人头疼的手势冲突问题,正好前两天碰到一个类似的bug,于是借着这个机会了解了...
    闫仕伟阅读 5,440评论 2 23
  • 前两天晚上,难得不用晚办公,就想着捯饬一下我的狗窝。偏偏站在凳子上又够不到放在上面的东西,索性踩到桌子上收拾东西,...
    桃宜阅读 2,012评论 17 6
  • 文/背丶影 在我上小学的时候,我们那块地方就有不少人来北京了,那时候没想过,什么时候我也能去。到现在他们都开玩笑说...
    背丶影阅读 285评论 0 0