UIScrollView之isTracking delaysContentTouches canCancelContentTouches

UIScrollView有二个BOOL类型的tracking属性,用来回到用户是不是已经接触内容并打算初阶滚动,我们从那性格子早先商量UIScrollView的办事规律:

UIScrollView之isTracking delaysContentTouches canCancelContentTouches,

UIScrollView有一个BOOL类型的tracking属性,用来回到用户是还是不是早已触发内容并打算初始滚动,大家从那天性格开端研讨UIScrollView的干活原理:

当手指触摸到UIScrollView内容的刹那间,会产生上边的动作:

  • 阻拦触摸事件
  • tracking属性别变化为YES

  • 二个放置的计时器开首生效,用来监督在非常短的事件间隔内是不是发生了手指运动

    case1:当检验到时刻间隔内手指发生了运动,UIScrollView本人触发滚动,tracking属性别变化为NO,手指触摸下即便有(能够响应触摸事件的)内部控件也不会再响应触摸事件。

    case二:当检查评定到时刻间隔内手指未有活动,tracking属性保持YES,手指触摸下1旦有(能够响应触摸事件的)内部控件,则将触摸事件传递给控件实行拍卖。

     

有无数信息类的App顶部都有1个滑行菜单栏,主要模型大概是由二个UIScrollView包涵多少个UIButton控件组成;当你操作的时候,手指即使是很迅猛的在地点划过,会发觉便是手指触摸的地点有UIButton,不过并不曾接触该UIButton的其余触摸事件,那正是下边提到的case壹;当你手指是迟迟划过或根本就没动,才会触发UIButton的触摸事件,那是case贰的状态。

地点的办事规律其实有1天性质开关来决定:delaysContentTouches。暗中认可值为YES;假设设置为NO,则不管手指运动的多多快,始终都会将触摸事件传递给内部控件;设置为NO只怕会影响到UIScrollView的滚动作效果应。

再看另三个BOOL类型的习性canCencelContentTouches,从字面上领悟是“能够废除剧情触摸“,暗许值为YES。文书档案里的表达是如此的:

A Boolean value that controls whether touches in the content view always
lead to tracking.

If the value of this property is YES and a view in the content has begun
tracking a finger touching it, and if the user drags the finger enough
to initiate a scroll, the view receives a touchesCancelled:withEvent:
message and the scroll view handles the touch as a scroll. If the value
of this property is NO, the scroll view does not scroll regardless of
finger movement once the content view starts tracking.

翻译为汉语差不离如下:

本条BOOL类型的值控制content view里的触摸是或不是总能引发跟踪(tracking)

若果属性值为YES并且跟踪到手指正触摸到2个内容控件,那时倘若用户拖入手指的偏离丰裕发生滚动,那么内容控件将选择1个touchesCancelled:with伊芙nt:音讯,而scroll
view将此次触摸作为滚动来处理。如若值为NO,一旦content
view开始跟踪(tracking==YES),则不管手指是或不是移动,scrollView都不会滚动。

简易通俗点说,假设为YES,就会等待用户下一步动作,假若用户移动手指到一定距离,就会把这一个操作作为滚动来拍卖并开始滚动,同时发送1个touchesCancelled:with伊芙nt:新闻给内容控件,由控件自行处理。若是为NO,就不会等待用户下一步动作,并始终不会触发scrollView的轮转了。

能够用壹段代码来验证并着眼一下,定义贰个MyScrollView继承自UIScrollView,叁个MyButton继承自UIButton,然后重写一些方法:

MyScrollView.m

图片 1

- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
    [super touchesShouldCancelInContentView:view];

    NSLog(@"touchesShouldCancelInContentView");

    return YES;
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesCancelled:touches withEvent:event];


    NSLog(@"touchesCancelled");
}

图片 2

MyButton.m

图片 3

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesCancelled:touches withEvent:event];

    NSLog(@"【Button's touch cancelled】");
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesBegan:touches withEvent:event];

    NSLog(@"【Button's touch began】");
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];

    NSLog(@"【Button's touch moved】");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent:event];

    NSLog(@"【Button's touch ended】");
}

图片 4

其实正是在相继艺术执行时打字与印刷出三个符号,当canCencelContentTouches值为YES时,用户触摸并活入手指再松开:

【Button’s touch began】

【Button’s touch moved】

  ……

【Button’s touch moved】

touchesShouldCancelInContentView

【Button’s touch cancelled】

当canCencelContentTouches值为NO时,用户触摸并活入手指再放手:

【Button’s touch began】

【Button’s touch moved】

  ……

【Button’s touch moved】

【Button’s touch ended】

 参考链接:

http://www.jianshu.com/p/9436c9a2cd1e

 http://blog.csdn.net/opentogether/article/details/52223878  

http://www.bkjia.com/IOSjc/1231296.htmlwww.bkjia.comtruehttp://www.bkjia.com/IOSjc/1231296.htmlTechArticleUIScrollView之isTracking delaysContentTouches
canCancelContentTouches,
UIScrollView有2个BOOL类型的tracking属性,用来回到用户是还是不是早已触发内容并打算开头…

当手指触摸到UIScrollView内容的立刻,会产生上边包车型地铁动作:

  • 阻碍触摸事件
  • tracking属性别变化为YES

  • 三个松开的计时器起始生效,用来监督在十分的短的事件间隔内是还是不是发生了手指运动

    case1:当检查评定到时间距离内手指爆发了活动,UIScrollView本身触发滚动,tracking属性别变化为NO,手指触摸下即便有(能够响应触摸事件的)内部控件也不会再响应触摸事件。

    case二:当检验到时刻间隔内手指未有运动,tracking属性保持YES,手指触摸下固然有(可以响应触摸事件的)内部控件,则将触摸事件传递给控件实行拍卖。

     

有很多新闻类的App顶部都有二个滑行菜单栏,主要模型可能是由一个UIScrollView蕴涵多个UIButton控件组成;当你操作的时候,手指借使是很迅猛的在地方划过,会意识正是手指触摸的地点有UIButton,然则并不曾接触该UIButton的其余触摸事件,那就是地方提到的case一;当你手指是舒缓划过或根本就没动,才会触发UIButton的触摸事件,那是case二的景况。

上面的劳作规律其实有一天性质开关来控制:delaysContentTouches。暗许值为YES;假设设置为NO,则无论手指运动的多多快,始终都会将触摸事件传递给内部控件;设置为NO或许会影响到UIScrollView的滚动效应。

再看另2个BOOL类型的性质canCencelContentTouches,从字面上驾驭是“能够收回情节触摸“,暗中同意值为YES。文档里的分解是那般的:

A Boolean value that controls whether touches in the content view always
lead to tracking.

If the value of this property is YES and a view in the content has begun
tracking a finger touching it, and if the user drags the finger enough
to initiate a scroll, the view receives a touchesCancelled:withEvent:
message and the scroll view handles the touch as a scroll. If the value
of this property is NO, the scroll view does not scroll regardless of
finger movement once the content view starts tracking.

翻译为华语大概如下:

其一BOOL类型的值控制content view里的入手是还是不是总能引发跟踪(tracking)

若是属性值为YES并且跟踪到手指正触摸到四个内容控件,那时借使用户拖入手指的相距丰盛产生滚动,那么内容控件将收取多少个touchesCancelled:with伊芙nt:新闻,而scroll
view将这一次触摸作为滚动来处理。如若值为NO,一旦content
view伊始跟踪(tracking==YES),则无论手指是不是移动,scrollView都不会滚动。

简短通俗点说,如若为YES,就会等待用户下一步动作,要是用户移动手指到早晚距离,就会把那些操作作为滚动来处理并起始滚动,同时发送1个touchesCancelled:with伊夫nt:音讯给内容控件,由控件自行处理。即便为NO,就不会等待用户下一步动作,并一贯不会触发scrollView的滚动了。

能够用1段代码来表明并观望一下,定义3个MyScrollView继承自UIScrollView,二个MyButton继承自UIButton,然后重写壹些方法:

MyScrollView.m

图片 5

- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
    [super touchesShouldCancelInContentView:view];

    NSLog(@"touchesShouldCancelInContentView");

    return YES;
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesCancelled:touches withEvent:event];


    NSLog(@"touchesCancelled");
}

图片 6

MyButton.m

图片 7

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesCancelled:touches withEvent:event];

    NSLog(@"【Button's touch cancelled】");
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesBegan:touches withEvent:event];

    NSLog(@"【Button's touch began】");
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];

    NSLog(@"【Button's touch moved】");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent:event];

    NSLog(@"【Button's touch ended】");
}

图片 8

实质上正是在各样艺术执行时打字与印刷出一个标记,当canCencelContentTouches值为YES时,用户触摸并活动手指再推广:

【Button’s touch began】

【Button’s touch moved】

  ……

【Button’s touch moved】

touchesShouldCancelInContentView

【Button’s touch cancelled】

当canCencelContentTouches值为NO时,用户触摸并活入手指再推广:

【Button’s touch began】

【Button’s touch moved】

  ……

【Button’s touch moved】

【Button’s touch ended】

 参考链接:

http://www.jianshu.com/p/9436c9a2cd1e

 http://blog.csdn.net/opentogether/article/details/52223878