美文网首页
IOS-基础控件之UIScrollView

IOS-基础控件之UIScrollView

作者: KevenT | 来源:发表于2019-04-24 11:06 被阅读0次
    UIScrollView是ios中常用的控件,这一篇主要记录一些使用和注意点

    1. UIScrollView常用属性

    • CGPoint contentOffset
      表示、设置ScrollView的滚动位置(即\color{#FF0000}{内容左上角}\color{#FF0000}{ScrollView左上角}的间距值)

    • CGSize contentSize
      用来表示UIScrollView内容的尺寸,滚动范围(\color{#FF0000}{必须要设置,否则无法滚动}

    • UIEdgeInsets contentInset
      这个属性能够在UIScrollView的四周增加额外的滚动区域,一般用来避免scrollView的内容被其它控件遮挡

    • BOOL bounces
      设置scrollview是否需要弹簧效果

    • BOOL scrollEnable
      设置scrollview是否能滚动

    • BOOL showsHorizontalScrollIndicator
      是否显示水平滚动条

    • BOOL showsVerticalScrollIndicator
      是否显示竖直滚动条

    2.属性说明

    借用MJ老师视频中的一张图说明下contentOffset、contentSize、contentInset这三个属性


    属性说明

    3.监听ScrollView的滚动

    要监听scrollview的滚动必须遵守UIScrollViewDelegate协议,并且然控制器成为UIScrollView的代理,然后实现协议中的方法。

    • 监听用户开始拖动
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
    
    • 监听拖动到某个位置
    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
    
    • 监听用户结束拖动
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    

    4.UIScrollView缩放

    要实现缩放功能,也同样需要遵守UIScrollViewDelegate协议,让控制器成为代理,并且实现协议中的以下方法

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    

    当用户在UIScrollView身上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件。(必须实现viewForZoomingInScrollView:,否则无法缩放)

    \color{red}{缩放步骤:}
    (1)设置UIScrollView的id<UISCrollViewDelegate> delegate代理对象
    (2)设置minimumZoomScale:缩小的最小比例
    (3)设置maximumZoomScale:放大的最大比例
    (4) 让代理对象实现下面的方法,返回需要缩放的视图控件

    跟缩放相关的其它方法
    • 缩放完毕的时候调用
    - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
    
    • 正在缩放的时候调用
    - (void)scrollViewDidZoom:(UIScrollView *)scrollView
    

    5.实现滚动和缩放的示例代码如下

    #import "ViewController.h"
    /**
     * 使用scrollview的时候必须要实现UIScrollViewDelegate
     */
    @interface SecondViewController ()<UIScrollViewDelegate>
    @property (strong, nonatomic) IBOutlet UIScrollView *myScrollView;
    @property (nonatomic,strong) UIImageView *imageView;
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        //设置控制器为scrollView的代理
        _myScrollView.delegate = self;
        
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"landing_background"]];
        [_myScrollView addSubview:imageView];
        self.imageView = imageView;
        
        //********设置内容展示区域(必须要设置,否则无法拖动)
        _myScrollView.contentSize = CGSizeMake(imageView.frame.size.width, imageView.frame.size.height);
        //设置scrollview背景色
        _myScrollView.backgroundColor = [UIColor orangeColor];
        
        //最大、最小缩放
        _myScrollView.maximumZoomScale = 2.0;
        _myScrollView.minimumZoomScale = 0.2;
    
        //设置偏移量
        _myScrollView.contentInset = UIEdgeInsetsMake(40, 40, 10, 10);
        
        //设置scrollview移动到某个坐标(左上角为原点)
        _myScrollView.contentOffset = CGPointMake(-100, -100);
    }
    
    #pragma mark - *****缩放需要实现下面的方法(不实现无法完成缩放)
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        return _imageView;
    }
    
    #pragma mark - scrollView将要开始拖拽
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
    {
        NSLog(@"scrollView将要开始拖拽");
    }
    
    #pragma mark - scrollView将要结束拖拽
    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
    {
        NSLog(@"scrollView将要结束拖拽");
    }
    
    #pragma mark - scrollView正在拖拽
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        NSLog(@"scrollView正在拖拽");
    }
    @end
    

    相关文章

      网友评论

          本文标题:IOS-基础控件之UIScrollView

          本文链接:https://www.haomeiwen.com/subject/lysbgqtx.html