UIScrollView
首先UIScrollView继承自UIView实现了NSCoding协议.作用是显示多于一个屏幕的内容。他有子类UITableView UItextView UIWebView 。
。在我的理解中,我把UIScrollView看成是具有上下两层的一个复合视图,frame控制着上层的大小,我们看到的UIScrollView的大小实际就是frame的大小,上层固定不动,显示的变化,由下层的滚动来控制。而下层滚动的区域的大小,就是由contentSize来控制的了。例如:若frame = (0, 0, 320, 480) contentSize = (320, 960),代表本UIScrollView可以上下滚动,滚动区域为frame大小的两倍。
基本属性
CGPoint contentOffSet 当前滚动的位置,这个属性的概念是我现在contentSize说显示的和初始时候的偏移量,视图超过scrollView的位置
CGSize contentSize 我整个要呈现的内容的大小(1000,1460)
BOOL directionalLockEnable 指定控件是否只能在一个方向上滚动
BOOL bounces 设定遇到边框是否反弹
BOOL alwaysBounceVertical 控制垂直方向上遇到边框是否反弹
BOOL alwaysBounceHorizontal 控制水平方向上遇到边框是否反弹
BOOL pagingEnabled 控制控件是否可以整页翻动
BOOL scrollEnabled 控制控件是否可以滚动
BOOL showsHorizontalScrollIndicator 控制是否显示水平滚动条
BOOL showsVerticalScrollIndicator 控制是否显示垂直滚动条
UIEdgeInsets scrollIndicatorInsets 指定滚动条在scrollerView中的位置
UIScrollView IndicatorStyleindicatorStyle 设定滚动条的样式
float decelerationRate 设定scrollView的减速速率
BOOL tracking 监控scrollView是否正在被跟踪
BOOL dragging 当前scrollView是否被拖拽
BOOL decelerating 监控当前scrollView是否正在减速
BOOL delaysContentTouchs 控制视图是否延时调用开始滚动的方法
BOOL canCancelContentTouches控制控件是否接触取消touch的事件
float minimumZoomScale 缩小的最小比例
float maximumZoomScale 放大的最大比例
float zoomScale 控制缩放的时候的变化比例
BOOL bouncesZoom 控制缩放的时候是否会反弹
BOOL zooming 判断控件是否正在缩放 大小是否正在改变
BOOL 控制控件滚动到底部
这里把UIScrollView的几个要点总结下:
从你的手指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事件不会再发生。
//只要滚动了就会触发
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
{
// NSLog(@" scrollViewDidScroll");
NSLog(@"ContentOffset x is %f,yis %f",scrollView.contentOffset.x,scrollView.contentOffset.y);
}
//开始拖拽视图
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
{
NSLog(@"scrollViewWillBeginDragging");
}
//完成拖拽
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
{
NSLog(@"scrollViewDidEndDragging");
}
//将开始降速时
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
{
NSLog(@"scrollViewWillBeginDecelerating");
}
//减速停止了时执行,手触摸时执行执行
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
{
NSLog(@"scrollViewDidEndDecelerating");
}
//滚动动画停止时执行,代码改变时出发,也就是setContentOffset改变时
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
{
NSLog(@"scrollViewDidEndScrollingAnimation");
}
//设置放大缩小的视图,要是uiscrollview的subview
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
{
NSLog(@"viewForZoomingInScrollView");
return viewA;
}
//完成放大缩小时调用
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale;
{
viewA.frame=CGRectMake(50,0, 100, 400);
NSLog(@"scale between minimum and maximum. called after any 'bounce' animations");
}// scale between minimum and maximum. called after any 'bounce' animations
//如果你不是完全滚动到滚轴视图的顶部,你可以轻点状态栏,那个可视的滚轴视图会一直滚动到顶部,那是默认行为,你可以通过该方法返回NO来关闭它
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;
{
NSLog(@"scrollViewShouldScrollToTop");
return YES;
}
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;
{
NSLog(@"scrollViewDidScrollToTop");
}