UIScrollView上子视图的Touch事件响应逻辑,通俗易懂

知识点:

1、delaysContentTouches:是否延迟判断子视图触碰事件

2、touchesShouldBegin:withEvent:inContentView:是否让子视图接受触碰事件

3、canCancelContentTouches 是否可以取消子视图触碰事件

4、touchesShouldCancelInContentView: 触碰事件是否可以取消

白话文流程图,通俗易懂

UIScroll触碰流程图.png

归纳:

简称:

A、delaysContentTouches

B、touchesShouldBegin:withEvent:inContentView:

C、canCancelContentTouches

D、touchesShouldCancelInContentView:

一、UIScrollView响应:

情况1:当A=YES,快速滚动

情况2:当A=YES,没有快速滚动,B返回NO

情况3:当A=NO,B返回NO

情况4:当A=NO,B返回YES,C返回YES,D返回YES

二、子视图响应:

情况1:当A=YES,没有快速滚动,B返回YES,C返回NO

情况2:当A=YES,没有快速滚动,B返回YES,C返回YES,D返回NO

情况3:当A=NO,B返回YES,C返回NO

情况4:当A=NO,B返回YES,C返回YES,D返回NO

常用开发:

需求为:需要实现UIScrollView上的子视图的触碰事件,则代码如下:

self.scroll_bottom.delaysContentTouches = NO;//延迟响应接触事件

self.scroll_bottom.canCancelContentTouches = NO;//取消传递接触事件,
- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
    //同类控件区分方法if(view.tag == 1)
    //不同类控件区分方法if ([view.class isEqual:[XXX class]])
    if ([view.class isEqual:[UILabel class]])
    {
        return NO;
    }
    else
    {
        return YES;
    }
    return YES;
}

你可能感兴趣的:(UIScrollView上子视图的Touch事件响应逻辑,通俗易懂)