UIScrollView的几个要点

问题来源:

       对于一个UITableView,按照其本身的设置,有以下三种情况:

       1)如果点击一个cell的时候,cell会高亮;

       2)如果快速擦碰(swipe),cell不会高亮,tableview会滚动;

       3)如果点击一个cell,cell高亮,按住不放,然后滑动,tablewview开始滚动,cell高亮取消。

       以上现象,是基于什么机制或原理实现的。

分析结果:

       UITableView继承自UIScrollView,按照之前文章的说法,UIView的默认做法是,将touch事件的传递是从最外层的subview开始的,hitTest:withEvent:方法返回的hit-test view应该是外层的subview,但实际上,UIScrollView重载了hitTest:withEvent:方法,永远返回自己。

       对于touch事件的传递,是通过UIScrollView来控制的,当scrollview被手指触碰的时候,会开启一个计时器timer:

       1)如果150ms内,你的手指没有明显的移动,scrollview会把touch事件传递给subview(情况1);

       2)如果150ms内,手指有明显的滑动,比如swipe,scrollview就是开始滑动,而不会把touch事件传递给subview(情况2);

       3)如果150ms内,手指没有明显的滑动,scrollview把事件传递给subview,但之后手指开始滑动,此时,scrollview会发送一个touchesCanclled消息给subview,然后开始滑动(情况3)。

       这里,UIScrollView有两个属性与上面的实现机制有关:

       delaysContentTouches

       默认值为YES,如果设置为NO,touch事件会立即传递给subview,不会有150ms的timer等待。

       canCancelContentTouches

       默认值为YES,如果设置为NO,touch时间一旦传递给subview,scrollview就不会再发送一个touchesCanclled消息给subview,scrollview也不会再滑动。

      


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值