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 代理方法

的返回值

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

视图大 视图中 视图小 有响应的视图
NO NO YES 中、小
NO YES YES 大、 中、小
YES NO YES 大、中、小
YES YES YES 大、 中、小
NO NO NO
NO YES NO 中、小
YES YES NO 大、 中、小
YES NO NO 大、 小

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

视图大 视图中 有响应的视图
NO NO
YES NO 大、中
NO YES 大、 中
YES YES 大、 中

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

如果某个视图的 shouldRecognizeSimultaneouslyWithGestureRecognize

返回了YES(前提是该手势设置了代理,scrollView自带手势已经设置过代理是scrollView 自身),并且该视图是第一响应这,则手势继续向下层视图传递。

如果某个视图 shouldRecognizeSimultaneouslyWithGestureRecognize 返回了YES,但是该视图不是第一响应者,则传递到该视图并响应该视图的手势之后,就停止继续向下传递。注意:返回NO虽然不向下传递了,如果该视图的父视图

也返回了YES,则该视图的俯视图也会响应。

相关推荐
總鑽風5 小时前
搭建Spring Boot + ELK日志平台,实现可视化日志监控
spring boot·elk·macos
Sim14808 小时前
iPhone将内置本地大模型,手机端AI实现0 token成本时代来临?
人工智能·ios·智能手机·iphone
Digitally10 小时前
如何将 iPad 上的照片传输到 U 盘(4 种解决方案)
ios·ipad
CS创新实验室11 小时前
《计算机网络》深入学:IP地址 VS. MAC地址
tcp/ip·计算机网络·macos
是孑然呀11 小时前
mac m4mini安装软件
macos
简单点了11 小时前
mac安装Java环境
java·macos
涔溪11 小时前
腾讯 WorkBuddy 超详细卸载清理文档(适用于 Windows 1011 + macOS 全版本,彻底卸载、不留残留)
windows·macos·ai·workbuddy
简单点了12 小时前
mac安装idea
java·macos·intellij-idea
报错小能手12 小时前
ios开发方向——swift并发进阶核心 @MainActor 与 DispatchQueue.main 解析
开发语言·ios·swift
LcGero13 小时前
Cocos Creator 业务与原生通信详解
android·ios·cocos creator·游戏开发·jsb