一、UIScrollview基本概念ui
UIScrollView是一个用于选择滑动的视图,能够显示更多的视图。并且能够经过手势放大、缩小要显示的内容spa
UIScrollView包含两个子类:UITableView、UITextView. 它们均可以实现滑动视图的全部动做代理
二、UIScrollView经常使用属性code
//能够滚动的大小,默认是0 没有滚动效果 contentSize //当touch后尚未拖到时值位YES 不然为NO tracking //正在缩放时为YES 不然为NO zooming //滚动后,手指放开还在滚动中为YES 不然为NO decelerating //设置手指放开后的减速速率 decelerationRate //浮点数 能放最大的倍数 maximumZoomScale //浮点数 能放最小的倍数 minimumZoomScale //当值为YES 会自动滚动UIScrollView的边界 默认是NO pagingEnabled //决定是否能够滚动 scrollEnabled //滚动时是否显示水平滚动条 showsHorizontalScrollIndicator //滚动时是否显示垂直滚动条 showsVerticalScrollIndicator //默认是YES 滚动超过边界后会有反弹回来的效果 若为NO 滚动超过边界后会当即中止 bounces //与bounces同样的效果 区别在:效果是显示在缩放上 bouncesZoom //默认是NO 能够在水平和垂直方向同时运动 若为YES 假如一开始是水平或垂直方法滚动 则会锁定另一个方向的滚动,若一开始是对角方向滚动 则不会禁止某个方向的滚动 directionalLockEnabled //设置滚动条的样式 基本只设置颜色 默认 、黑、白 indicatorStyle //设置滚动条位置 scrollIndicatorInsets
//设置内容边缘位置
contentInsets
//设置UIScrollView滚动到某一个位置或某个区域
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
orm
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated; 对象
三、UIScrollView经常使用代理方法blog
滚动时,滚动视图轨迹状态包括跟踪、拖动、减速和缩放。继承
contentOffSet属性定义了滚动视图左边界左上方的可见点的偏移位置,具体参数以下:图片
//UIScrollView已经滚动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
//scrollView开始拖动
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView; //scrollView结束拖动 (IOS 5.0以后的方法)
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset // scrollView结束拖动
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; //scrollview开始减速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; //scrollView减速中止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; //返回一个放大或缩小的视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; //开始放大或缩小
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
//视图正在放大或缩小
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
//缩放结束
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
//是否支持滑动到底部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
//滑动到底部时调用改方法
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
四、UIScrollView与UIPageControl的结合使用ci
五、UIScrollView的捏合手势
只须要实现一个委托方法就能够是UIScrollView的子视图经过捏合手势实现缩放功能
1 //返回一个放大或缩小的视图 2 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
六、isMemberOfClass 与isKindOfClass的区别
二者均可以坚持一个对象是不是某个类的成员,区别在于:isKindOfClass 不只能够肯定一个对象是不是某个类的成员,也能够肯定某个对象是不是派生自该类的成员
而isMemberOfClass 作不到这一点
七、案例:滑动视图实现分页缩放,双击时能够放大缩小图片
1 //自定义ImageScrollView 继承自 UIScrollView实现缩放功能,双击也能够放大缩小 2 - (id)initWithFrame:(CGRect)frame 3 { 4 self = [super initWithFrame:frame]; 5 if (self) { 6 self.maximumZoomScale = 2.5; 7 self.minimumZoomScale = 1; 8 self.showsHorizontalScrollIndicator = NO; 9 self.showsVerticalScrollIndicator = NO; 10 11 self.delegate = self; 12 _imageView = [[UIImageView alloc] initWithFrame:self.bounds]; 13 [self addSubview:_imageView]; 14 15 UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomInOrOut:)]; 16 doubleTap.numberOfTapsRequired = 2; 17 [self addGestureRecognizer:doubleTap]; 18 } 19 return self; 20 } 21 22 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ 23 return _imageView; 24 } 25 - (void)zoomInOrOut:(UITapGestureRecognizer *)tapGesture{ 26 if (self.zoomScale>=2.5) { 27 [self setZoomScale:2. animated:YES]; 28 }else { 29 CGPoint point = [tapGesture locationInView:self]; 30 [self zoomToRect:CGRectMake(point.x - 40, point.y-40, 80, 80) animated:YES]; 31 } 32 }
1 //MainViewController的主要代码 2 - (void)viewDidLoad 3 { 4 [super viewDidLoad]; 5 6 _scrollView.contentSize = CGSizeMake(320 *4,460); 7 _scrollView.pagingEnabled = YES; 8 //将_scrollView的tag设置int_max 与ImageScrollView区分,不然下面经过当tag为0时_scrollView得到根据tag得的时其本身 9 _scrollView.tag = INT_MAX; 10 for (int i=0; i<4; i++) { 11 ImageScrollView *imageScrollView = [[ImageScrollView alloc] initWithFrame:CGRectMake(0+i*320, 0, 320, 460)]; 12 NSString *imageName = [NSString stringWithFormat:@"%d.JPG",i+1]; 13 UIImage *image = [UIImage imageNamed:imageName]; 14 imageScrollView.imageView.image = image; 15 imageScrollView.tag = i; 16 [_scrollView addSubview:imageScrollView]; 17 } 18 19 UIPageControl *pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 400, 320, 20)]; 20 pageControl.numberOfPages = 4; 21 pageControl.pageIndicatorTintColor = [UIColor redColor]; 22 pageControl.currentPageIndicatorTintColor = [UIColor purpleColor]; 23 pageControl.tag = 100; 24 [self.view addSubview:pageControl]; 25 } 26 27 int pre = 0; 28 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ 29 int currentIndex = scrollView.contentOffset.x / 320.0; 30 UIPageControl *pageControl = (UIPageControl *)[scrollView.superview viewWithTag:100]; 31 pageControl.currentPage = currentIndex; 32 ImageScrollView *imageScrollView = (ImageScrollView *)[scrollView viewWithTag:pre]; 33 if (imageScrollView.zoomScale > 1.0 && pre!=currentIndex) { 34 imageScrollView.zoomScale = 1.0; 35 } 36 pre = currentIndex; 37 }