0
点赞
收藏
分享

微信扫一扫

【python - 数据】

梅梅的时光 2024-06-30 阅读 11

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,则该视图的俯视图也会响应。

举报

相关推荐

0 条评论