iOS回顾笔记(04) -- UIScrollView的基本使用详解

    xiaoxiao2021-03-25  108

     

    iOS回顾笔记(04) -- UIScrollView的基本使用详解

    前言

    本文主要讲述了 UIScrollView 的一些常用的属性和方法、引申了delegate的思想和UIScrollView的缩放。这篇文章着重介绍UIScrollView的基本知识,关于UIScrollView的实例使用我会在下一篇iOS回顾笔记(05)中着重讲解。

    UIScrollView

    UIScrollView :顾名思义就是 可以滚动的 UIView。 由于手机的屏幕比较小,所以直接可以展示在用户眼前的内容极其有限 当展示的内容较多且超出一个屏幕时,用户可以通过手势滑动来查看屏幕以外的东西 普通的UIView不具备滚动的功能,所以不适合展示较多的内容 UIScrollView就是一个可以滚动的UIView,用来展示大量的内容,并且可以通过滚动来展示所有内容 UIScrollView实例:手机上可上下滑动的页面都是,如QQ聊天页面

    UIScrollView的基本使用

    UIScrollView的使用很简单,基本使用方式如下:

    将需要展示的内容添加到UIScrollView中 设置UIScrollView的 contentSize属性,告诉它它内容的尺寸,也就是设置它的可滚动范围 // 1.创建滚动视图 UIScrollView *scrollView = [[UIScrollView alloc] init]; scrollView.frame = CGRectMake(0,0,375,150); [self addSubview:scrollView]; // 2. 设置内容 [scrollView addSubview:[UIImageView new]]; // 3. 设置滚动范围 scrollView.contentSize = CGSizeMake(ImageViewCount * self.bounds.size.width, 0);

    UIScrollView的显示内容的小细节

    超过UIScrollView边界的内容会被自动隐藏 用户可以用过拖拽手势来查看超出UIScrollView边界被隐藏的内容

    UIScrollView无法滚动可能的原因

    未设置 contentSize,不知滚动的范围 scrollEnable = NO; 可滚动属性设置为NO userInteractionEnable = NO; 未接受用户事件

    UIScrollView的常用属性

    内容偏移量:contentOffset @property(nonatomic) CGPoint contentOffset; // default CGPointZero

    contentOffset用来表示UIScrollView的滚动位置。

    具体为内容原点与UIScrollView左上角原点的间距值。

    内容大小:contentSize @property(nonatomic) CGPoint contentSize; // default CGSizeZero

    contentSize:表示UIScrollView的内容的尺寸,用来设置UIScrollView的滚动范围。

    额外滚动区域:contentInset @property(nonatomic) UIEdgeInsets contentInset; // default UIEdgeInsetsZero. add additional scroll area around content

    contentInset:可以在UIScrollView的四周增加额外的滚动区域。可以用来避免UIScrollView的内容被其他控件挡住。

    以上属性效果如图:

    UIScrollView的其他属性

    弹簧效果 @property(nonatomic) BOOL bounces; // default YES. if YES, bounces past edge of content and back again 是否能滚动 @property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled; // default YES. turn off any dragging temporarily 是否显示水平滚动条 @property(nonatomic) BOOL showsHorizontalScrollIndicator; // default YES. show indicator while we are tracking. fades out after tracking 是否显示垂直滚动条 @property(nonatomic) BOOL showsVerticalScrollIndicator; // default YES. show indicator while we are tracking. fades out after tracking UIScrollView的Delegate(代理) @property(nullable,nonatomic,weak) id<UIScrollViewDelegate> delegate; // default nil. weak reference

    UIScrollView的Delegate

    Deleagate 是一个很重要的属性,同时也是一个重要的知识点,所以拿出来着重说一下。

    代理思想的引入

    通常,我们会在UIScrollView 正在滚动、滚到到某个位置、停止滚动等情况下做一些特定的操作 若想完成以上操作,需要对UIScrollView的各个状态进行“监听”,这个监听者就是我们说的代理 当UIScrollView发生一系列滚动操作时,会自动发送消息给它的代理对象,通知它当下的实时滚动状态。 总结一下就是,如果想要监听UIScrollView的实时滚动状况,我们就要给它设置代理,然后通过代理来得知它的实时滚动情况

    实际上UIScrollView通知delegate自己的相关状态就是通过给代理发消息实现的如图:

    所以想成为UIScrollView的代理是需要遵循如下条件的

    @property(nullable,nonatomic,weak) id<UIScrollViewDelegate> delegate; UIScrollView把代理需要实现的方法都定义在了UIScrollViewDelegate当中 成为代理必须遵守UIScrollViewDelegate这个协议,其本身可以是 id 类型的对象(任意类型对象) 代理对象必须实现UIScrollViewDelegate中相对应的方法,才能监听UIScrollView相应的状态

    设置UIScrollView的步骤

    通常情况下UIScrollView的代理都是控制器,设置方法有两种

    代码: scrollView.delegate = self; storyBoard/Xib拖线:

    控制器UIScrollViewDelegate

    @interface ViewController ()<UIScrollViewDelegate> 实现相对应的代理方法,进行监听 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ // 监听代码 } - (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2){ // 监听代码 } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ // 监听代码 } ···

    UIScrollView内容的缩放

    UIScrollView不仅能够展示大量的内容还能进行内容的缩放。

    常见场景

    图库里面的图片我们可以通过手势来进行缩放

    要实现这样的功能,我们只需要将图片放到UIScrollView中去,然后设置缩放比例和要缩放的内容

    缩放原理

    当用户在UIScrollView身上使用捏合手势的时候,UIScrollView会调用delegate的viewForZoomingInScollView方法,方法的返回值就是要进行缩放的控件。

    缩放实现步骤

    设置UIScrollView的代理对象 设置minimumZoomScale;// default is 1.0 最小缩放比例 设置maximumZoomScale;// default is 1.0. 最大缩放比例 代理实现viewForZoomingInScrollView方法返回要进行缩放的控件

    缩放相关的两个方法

    // 将要开始缩放 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view NS_AVAILABLE_IOS(3_2); // called before the scroll view begins zooming its content // 结束缩放 - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view atScale:(CGFloat)scale; // scale between minimum and maximum. called after any 'bounce' animations

    小结

    UIScrollView是iOS开发中常常用到的一个控件,通常用来展示比较多的内容,我们可以通过给他设置代理实现它的代理方法进行监听,通过监听不同的状态来做对应的一些操作。 它可以监听用户手势来缩放自己内部子控件。

     

    转载请注明原文地址: https://ju.6miu.com/read-8868.html

    最新回复(0)