ScrollView
UIScrollView就是可以滚动的视图,常常用在图片显示(缩放,滚动等),文本显示等,是一个非常有用的控件。
//声明一个scrollView
scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 50, widthOut, self.view.frame.size.height-50)];
scrollView.backgroundColor = [UIColor redColor];
//任意滑动
scrollView.pagingEnabled = NO;
//滑动过程中显示水平滚动条(如果有)
scrollView.showsHorizontalScrollIndicator = YES;
//滑动过程中显示垂直滚动条(如果有)
scrollView.showsVerticalScrollIndicator = YES;
//点击顶部的状态栏滚动到首
scrollView.scrollsToTop = YES;
scrollView.delegate = self;
[self.view addSubview:scrollView];
要使用 UIScrollView,则必须实现 UIScrollViewDelegate,该Delegate定义如下:
@protocol UIScrollViewDelegate<NSObject>
@optional
- (void)scrollViewDidScroll:(UIScrollView *)scrollView; // any offset changes
- (void)scrollViewDidZoom:(UIScrollView *)scrollView __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2); // any zoom scale changes
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView; // called on start of dragging (may require some time and or distance to move)
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; // called on finger up if user dragged. decelerate is true if it will continue moving afterwards
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; // called on finger up as we are moving
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; // called when scroll view grinds to a halt
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; // called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; // return a view that will be scaled. if delegate returns nil, nothing happens
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2); // called before the scroll view begins zooming its content
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale; // scale between minimum and maximum. called after any 'bounce' animations
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView; // return a yes if you want to scroll to the top. if not defined, assumes YES
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView; // called when scrolling animation finished. may be called immediately if already at top
@end
有几个是比较重要的:
scrollViewDidScroll:scrollView只要在滚动就会触发该方法(无论是被用户拖动还是在拖动后scrollView由于惯性继续滚动一点距离)
scrollViewWillBeginDragging:scrollView被用户拖动前就会触发该方法
scrollViewDidEndDragging:scrollView被用户拖动结束后就会触发该方法
scrollViewWillBeginDecelerating:scrollView在拖动后继续滚动前就会触发该方法
scrollViewDidEndDecelerating:scrollView在拖动后继续滚动后停止就会触发该方法
scrollViewShouldScrollToTop:返回YES或NO,表示是否支持用户点击屏幕顶端的状态条后scrollView滚动到顶端(默认YES)
scrollViewDidScrollToTop:用户点击屏幕顶端的状态条后scrollView滚动到顶端后会触发该方法(scrollViewShouldScrollToTop如果返回NO,则该方法不会被触发)
UIScrollView的常用属性如下:
scrollView.pagingEnabled = NO;
//划动过程中显示水平滚动条(如果有)
scrollView.showsHorizontalScrollIndicator = YES;
//划动过程中显示垂直滚动条(如果有)
scrollView.showsVerticalScrollIndicator = YES;
//点击顶部的状态栏滚动到首
scrollView.scrollsToTop = YES;
scrollView.delegate = self;
scrollView.contentSize = CGRect
pagingEnabled:是否以整数倍的UIScrollView大小滚动(如果是用于图片类的UIScrollView,该值应该设置为YES,如果是用于显示文本类的UIScrollView或者类似与本例的允许用户滚动到任意位置的情况时应该设置为NO)
contentOffset:UIScrollView中content的左上角坐标
contentSize:UIScrollView中content的大小,该值与UIScrollView的大小决定滚动条的长短
decelerating:UIScrollView在拖动放手后是否仍在由于惯性继续滚动中
dragging:UIScrollView是否正在被用户拖动
showsHorizontalScrollIndicator:是否显示水平滚动条
showsVerticalScrollIndicator:是否显示垂直滚动条