属性:
1.contentOffset:设置scrollView当前内容偏移量。
2.contentSize :设置 scorllView内容的大小 一般 上下滑动 (0,height),左右滑动(width,0)
3.contentInset:添加额外的滚动在scrollView区域的内容,可作为上下啦 加载刷新
4.delegate: 设置代理 主要作用是scrollView滑动变化,可以做tableViewcell图片异步加载优化
5.directionalLockEnabled:滑动方向锁, 一般都用2.contentSize 来做处理
6.bounces:超过的内容和边缘又弹回.
7.alwaysBounceVertical|alwaysBounceHorizontal:即使内容小于边界,允许垂直|水平 拖动
8.pagingEnabled:是否倍数width 滑动,一般作为图片轮播类,以及多列表
9.scrollEnabled:是否允许滑动
10.showsHorizontalScrollIndicator|showsVerticalScrollIndicator:显示滚动条
11.scrollIndicatorInsets:指定滚动条在scrollView中的位置
12.indicatorStyle:设定滚动条的样式
13.decelerationRate:改变scrollView的减速点位置
14.tracking:用户手指触碰scrollview但未拖动
15.dragging:scrollview是否正在被拖拽
16.decelerating:scrollview是否正在减速
17.delaysContentTouches:制视图是否延时调用开始滚动的方法
18.canCancelContentTouches:控制控件是否接触取消touch的事件
19.minimumZoomScale|maximumZoomScale:缩小的最小|最大比例
20.zoomScale:设置变化比例
21.bouncesZoom:控制缩放的时候是否会反弹
22.zooming:判断控件的大小是否正在改变
23.zoomBouncing:判断是否正在进行缩放反弹
24.scrollsToTop:控制控件滚动到顶部
从你的手指touch屏幕开始,scrollView开始一个timer,如果:
1. 150ms内如果你的手指没有任何动作,消息就会传给subView。
2. 150ms内手指有明显的滑动(一个swipe动作),scrollView就会滚动,消息不会传给subView,这里就是产生问题二的原因。
3. 150ms内手指没有滑动,scrollView将消息传给subView,但是之后手指开始滑动,scrollView传送touchesCancelled消息给subView,然后开始滚动。
观察下tableView的情况,你先按住一个cell,cell开始高亮,手不要放开,开始滑动,tableView开始滚动,高亮取消。
delaysContentTouches的作用:
这个标志默认是YES,使用上面的150ms的timer,如果设置为NO,touch事件立即传递给subView,不会有150ms的等待。
cancelsTouches的作用:
这个标准默认为YES,如果设置为NO,这消息一旦传递给subView,这scroll事件不会再发生。
UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView; 这个方法在任何方式触发 contentOffset 变化的时候都会被调用(包括用户拖动,减速过程,直接通过代码设置等),可以用于监控 contentOffset 的变化,并根据当前的 contentOffset 对其他 view 做出随动调整。调用频繁 注意性能
- (void)scrollViewDidZoom:(UIScrollView *)scrollView;
任何缩小改变都会调用,频率很快 需要注意性能
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
开始准备拖动
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset;
该方法从 iOS 5 引入,在 didEndDragging 前被调用,当 willEndDragging 方法中 velocity 为 CGPointZero(结束拖动时两个方向都没有速度)时,didEndDragging 中的 decelerate 为 NO,即没有减速过程,willBeginDecelerating 和 didEndDecelerating 也就不会被调用。反之,当 velocity 不为 CGPointZero 时,scroll view 会以 velocity 为初速度,减速直到 targetContentOffset。值得注意的是,这里的 targetContentOffset 是个指针,没错,你可以改变减速运动的目的地,这在一些效果的实现时十分有用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
在用户结束拖动后被调用,decelerate 为 YES 时,结束拖动后会有减速过程。在 didEndDragging 之后,如果有减速过程,scroll view 的 dragging 并不会立即置为 NO,而是要等到减速结束之后,所以这个 dragging 属性的实际语义更接近 scrolling。
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
减速动画开始前被调用。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
减速动画结束时被调用,这里有一种特殊情况:当一次减速动画尚未结束的时候再次 drag scroll view,didEndDecelerating 不会被调用,并且这时 scroll view 的 dragging 和 decelerating 属性都是 YES。新的 dragging 如果有加速度,那么 willBeginDecelerating 会再一次被调用,然后才是 didEndDecelerating;如果没有加速度,虽然 willBeginDecelerating 不会被调用,但前一次留下的 didEndDecelerating 会被调用,所以连续快速滚动一个 scroll view 时,delegate 方法被调用的顺序(不含 didScroll)可能是这样的: