您的位置:首页 > 财经 > 产业 > iOS shouldRecognizeSimultaneouslyWithGestureRecognizer 调用机制探索

iOS shouldRecognizeSimultaneouslyWithGestureRecognizer 调用机制探索

2024/11/17 15:40:39 来源:https://blog.csdn.net/LIUXIAOXIAOBO/article/details/140054314  浏览:    关键词:iOS shouldRecognizeSimultaneouslyWithGestureRecognizer 调用机制探索

shouldRecognizeSimultaneouslyWithGestureRecognizer 经常会看到,但是一直没有弄清楚其中的原理和运行机制,今天专门研究下
其运行规律

我们准备三个视图,如下,红色的是绿色视图的父视图,绿色视图
是蓝色视图的父视图,为了探索 shouldRecognizeSimultaneouslyWithGestureRecognizer
请添加图片描述

并且,每一个视图中都有如下代码

- (instancetype)initWithFrame:(CGRect)frame
{self = [super initWithFrame:frame];if (self) {UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bigClick)];tap.numberOfTapsRequired = 1;self.backgroundColor = [UIColor greenColor];[self addGestureRecognizer:tap];tap.delegate = self;}return self;
}- (void)bigClick
{NSLog(@"点击中间的视图中间的视图");
}- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{return YES;
}

为了测试不同的情况,我们将 shouldRecognizeSimultaneouslyWithGestureRecognize方法返回不同的值,并在三个视图中设置不同的组合,来测试方法相应的效果

下面我们直接列出结果,并将结果列出一个表格
其中的YES或者NO都是该视图 shouldRecognizeSimultaneouslyWithGestureRecognize 代理方法
的返回值

点击小视图(蓝视图)的时候

视图大视图中视图小有响应的视图
NONOYES中、小
NOYESYES大、 中、小
YESNOYES大、中、小
YESYESYES大、 中、小
NONONO
NOYESNO中、小
YESYESNO大、 中、小
YESNONO大、 小

点击中视图(绿色)的时候

视图大视图中有响应的视图
NONO
YESNO大、中
NOYES大、 中
YESYES大、 中

以上,我们可以得出结论:

如果某个视图的 shouldRecognizeSimultaneouslyWithGestureRecognize
返回了YES(前提是该手势设置了代理,scrollView自带手势已经设置过代理是scrollView 自身),并且该视图是第一响应这,则手势继续向下层视图传递。
如果某个视图 shouldRecognizeSimultaneouslyWithGestureRecognize 返回了YES,但是该视图不是第一响应者,则传递到该视图并响应该视图的手势之后,就停止继续向下传递。注意:返回NO虽然不向下传递了,如果该视图的父视图
也返回了YES,则该视图的俯视图也会响应。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com