IOS-基础控件之UIScrollView

UIScrollView是ios中常用的控件,这一篇主要记录一些使用和注意点

1. UIScrollView常用属性

  • CGPoint contentOffset
    表示、设置ScrollView的滚动位置(即与的间距值)

  • CGSize contentSize
    用来表示UIScrollView内容的尺寸,滚动范围()

  • 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:,否则无法缩放)


(1)设置UIScrollView的id 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 ()
@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)