UIScrollView之isTracking delaysContentTouches canCancelContentTouchesUIScrollView之isTracking delaysContentTouches canCancelContentTouches,

UIScrollView有一个BOOL类型的tracking属性,用来回到用户是否已沾内容连打算开滚动,我们由者特性开始探究UIScrollView的工作规律:

UIScrollView之isTracking delaysContentTouches canCancelContentTouches,

UIScrollView有一个BOOL类型的tracking属性,用来回到用户是否曾经点内容并打算开滚动,我们打者特性开始探究UIScrollView的干活原理:

当手指触摸到UIScrollView内容的一刹那,会来下的动作:

  • 阻止触摸事件
  • tracking属性变为YES

  • 一个坐的计时器开始生效,用来监督在最为缺乏的事件间隔内是否发了指运动

    case1:当检测到日距离内手指发了挪,UIScrollView自己触发滚动,tracking属性变为NO,手指触摸下即使有(可以响应触摸事件的)内部控件也未会见再次响应触摸事件。

    case2:当检测到日距离内手指没挪动,tracking属性保持YES,手指触摸下如有(可以响应触摸事件的)内部控件,则用触摸事件传递给控件进行处理。

     

生好多新闻类的App顶部还起一个滑菜单栏,主要模型或是出于一个UIScrollView包含多单UIButton控件组成;当您操作的时光,手指要是颇便捷的当地方划喽,会发觉尽管手指触摸的地方产生UIButton,但是并从未沾该UIButton的任何触摸事件,这就算是面提到的case1;当您手指是迟迟划了或者从就从不动,才会触发UIButton的触摸事件,这是case2的情景。

地方的做事原理其实生一个属性开关来控制: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并且跟踪及手指正触摸到一个内容控件,这时要用户拖动手指的去足够产生滚动,那么内容控件将收到一个touchesCancelled:withEvent:消息,而scroll
view将这次触摸作为滚动来拍卖。如果值为NO,一旦content
view开始盯住(tracking==YES),则无手指是否动,scrollView都未会见滚动。

简通俗点说,如果也YES,就会见等待用户下一致步动作,如果用户移动手指到一定去,就会见管这操作作为滚动来处理并初步滚动,同时发送一个touchesCancelled:withEvent:消息被内容控件,由控件自行处理。如果也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有一个BOOL类型的tracking属性,用来回到用户是否就接触内容连打算开始…

当手指触摸到UIScrollView内容的瞬间,会时有发生下的动作:

  • 掣肘触摸事件
  • tracking属性变为YES

  • 一个搭的计时器开始生效,用来监督在太缺乏的事件间隔内是否生了指运动

    case1:当检测到时刻距离内手指发了走,UIScrollView自己触发滚动,tracking属性变为NO,手指触摸下即使发生(可以响应触摸事件的)内部控件也未会见另行响应触摸事件。

    case2:当检测及时刻距离内手指没动,tracking属性保持YES,手指触摸下要发(可以响应触摸事件的)内部控件,则以触摸事件传递给控件进行处理。

     

有诸多新闻类的App顶部还来一个滑动菜单栏,主要模型或是由一个UIScrollView包含多单UIButton控件组成;当你操作的上,手指要是坏便捷的当面划了,会意识便手指触摸的地方产生UIButton,但是连没碰该UIButton的其它触摸事件,这就是是面提到的case1;当你手指是迟迟划喽要根本就是从来不动,才见面触发UIButton的触摸事件,这是case2的情况。

方的行事规律其实有一个性能开关来支配: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并且跟踪到手指正触摸到一个内容控件,这时如用户拖动手指的去足够产生滚动,那么内容控件将收到一个touchesCancelled:withEvent:消息,而scroll
view将这次触摸作为滚动来处理。如果值也NO,一旦content
view开始盯住(tracking==YES),则任手指是否动,scrollView都非见面滚动。

简而言之通俗点说,如果为YES,就会等待用户下同样步动作,如果用户移动手指到自然距离,就会将此操作作为滚动来拍卖并开滚动,同时发送一个touchesCancelled:withEvent:消息给内容控件,由控件自行处理。如果为NO,就不见面等用户下同样步动作,并镇不见面触发scrollView的滚了。

可用同一截代码来证实并察看一下,定义一个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