iOS一个手势动作被多个UIGestureRecognizer识

2017-08-26  本文已影响0人  长鲜

假设你现在有三个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,那么只要有对应的手势发生在这个视图上,无论有没有其他的视图要识别这个事件。

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

上一篇下一篇

猜你喜欢

热点阅读