UIScrollView基本用法

一、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 }
相关文章
相关标签/搜索