decelerationRate范围为0-----1,一般0---0.5没有多少区别。0也没有问题。
decelerationrate 设置当它减速时的速度,0.1f的话,很快就停下来,1就正常速度停下,即滑动一定距离才停. |
当手指触摸后, scroll view会暂时拦截触摸事件,使用一个计时器,假如在计时器到点后,没有发生手指移动事件,那么,scroll view发送tracking events到被点击的subview
假如在计时器到点前,发生了移动事件,那么 scroll view 取消tracking自己发生滚动
子类可以重载touchesShouldBegin:withEvent:inContentView: 决定自己是否接收touch事件
pagingEnabled当值是YES,会自动滚动到subview的边界,默认是NO
touchesShouldCancelInCon
调用这个方法,决定是否发送tracking messages消息到subview,假如返回NO,发送,YES则不发送
假如 canCancelContentTouches属性是NO,则不调用这个方法
来影响如何处理滚动手势
scroll view还处理缩放和平移手势
要实现缩放和平移,必须实现委托viewForZoomingInScrollVi
scrollViewDidEndZooming:withView:atScale:
两个方法,另外 maximumZoomScale和minimumZoomScale两个属性要不一样几个属性
tracking
zoomBouncing
zooming
decelerating
decelerationRate
maximumZoomScale
minimumZoomScale
pagingEnabled
scrollEnabled
delaysContentTouches
是个布尔值,当值是YES的时候,用户触碰开始,scroll view要延迟一会,看看是否用户有意图滚动,假如滚动了,那么捕捉touch-down事件,否则就不捕捉, 假如值是NO,当用户触碰, scroll view会立即触发touchesShouldBegin:withEvent:inContentView:, 默认是YES
UIScrollView的经典例子就是safari的编辑模式了 UIScrollView可以垂直,水平滚动。 如果属性pageEnabled = YES,则设置其为分页模式,那么没滚动一次就是一页,垂直方向上的一页就是UIScrollView的高度,水平方向就是其宽度。 我们可以设置contentSize,这就是UIScrollView可以滚动的最大区域了。 UIScrollView没有datasource的概念,因为这就是一个view,具体view中的内容摆放完全随意,只是每次都会滚动固定的页面大小。 比如我们有5个页面,我们需要自己计算每个页面的位置,将其水平放在UIScrollView上。 contentSize则设置为5*每个页面的宽度,每个页面的高度。 如果contentSize的高度或这宽度正好与UIScrollView的高度或宽度相等,则在该方向上不能滚动。 具体例子可以查看官方文档的例子,PageControl。 注意:UIScrollView不会带有分页的指示符号,需要利用UIPageControl控制。 但是要想做到safari的效果,我们需要一个小技巧,因为在safari中,当前页时可以看到前后两页的部分内容。 注意:分页的宽度不能修改,所以我们只能缩小UIScrollView的宽度,让其不要占满整个屏幕,同时设置clipsToBouds属性为 NO,这样超出范围的视图也会显示,这样就能看到前后两页的内容,当然需要设置前后两页的alpha值为0.5,做出一个透明效果。 在UIScrollView的滚动事件中,判断位置,当一个页面出现的区域超过1半时,设置alpha为1,小于1半时设置alpha为0.5 现在还有一个问题:UIScrollView的滑动事件响应区域变小了,因为UIScrollView本身变小了,其余我们看到的页面在区域之外,因此我们需要重写UIScrollView所在的parentView的hittest事件,在其他区域的事件返回值为UIScrollView对象,这样用户感觉整个屏幕都是UIScrollView在响应了。 frame.size.width可视范围 -(void)scrollViewDidEndDecelera |