• UI基础--UIScrollView和UIScrollViewDelegate


    UIScrollView

    在iOS的控件中,普通的UIView不具备滚动功能,不能显⽰示过多的内容,因此,就有了一个能够滚动的视图控件,可以用来展⽰大量的内容,并且可以通过滚动查看所有的内容,并且能实现图片缩放功能的一个控件,这个就是UIScrollView。

     

     

    UIScrollView常用属性

     1 //滚动位置
     2 @property(nonatomic) CGPoint contentOffset; 
     3 //可视范围、滚动范围(或者说是scrollView的大小)
     4 @property(nonatomic) CGSize contentSize; 
     5 //上下左右,逆时针顺序,增加滚动边距。默认不显示这个距离,滚动之后才有。
     6 @property(nonatomic) UIEdgeInsets contentInset;
     7 //是否启用弹簧效果。默认启用
     8 @property(nonatomic) BOOL bounces; 
     9 //启用滚动
    10  @property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
    11 //横向滚动条
    12 @property(nonatomic) BOOL showsHorizontalScrollIndicator
    13 //纵向滚动条
    14 @property(nonatomic) BOOL showsVerticalScrollIndicator;

    注意点:

    如果UIScrollView⽆无法滚动,可能是以下原因:

    1、没有设置contentSize;

    2、scrollEnabled = NO;

    3、没有接收到触摸事件:userInteractionEnabled = NO;

    4、没有取消autolayout功能(要想scrollView滚动,必须取消autolayout)。

    5、不允许直接修改某个对象内部结构体(如contentoffset)属性的成员,必须遵循三个步骤(先拿到值,修改,再把修改后的值赋回去)。

     

    实现缩放功能:将需要缩放的内容添加到UIScrollView中即可,但是必须遵守UIScrollView代理协议,并且要先设置了代理,再使用代理方法才会生效。

    实现的原理:当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息,调用-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView方法,返回要缩放的控件(该控件必须为UIScrollView内的子控件)。

    实现缩放功能的4个步骤

    1、遵守scrollview的代理协议(一般为控制器)

    2、为scrollview设置代理(self)

    3、调用代理方法(-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView方法),返回需要实现缩放功能的子控件

    4、设置缩放的范围(最大和最小比例)

    1 //缩放属性
    2 @property(nonatomic) CGFloat minimumZoomScale;//最小缩放倍数,默认为1.0
    3 @property(nonatomic) CGFloat maximumZoomScale; //最大缩放倍数,默认为1.0(只有max大于min才会有缩放效果)

    跟缩放相关的其他代理方法

    缩放完毕的时候调用 

    - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view

    正在缩放的时候调用

    - (void)scrollViewDidZoom:(UIScrollView *)scrollView

     

     

    UIScrollViewDelegate

    delegate:代理(代理的名字都以类的名字开始,代理的方法也是 以对象的名字开始,大部分方法名都是这样)

    代理的作用:

    1)、传值,经常用在b类要把自己的一个数据或者对象传给a类,让a类去展示或者处理。(切分紧耦合,和代码分块的时候经常用)

    2)、传事件,所谓传事件就是a类发生了什么事,把这件事告诉关注委托的对象,由委托的对象去考虑发生这个事件后应该做出什么反映。

    UIScrollViewDelegate中的一些方法:

     1 - (void)scrollViewDidScroll:(UIScrollView *)scrollView;//滚动事件方法,滚动过程中会一直循环执行(滚动中…)
     2 
     3 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;//开始拖拽事件方法
     4 
     5 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;//拖拽操作完成事件方法
     6 
     7 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;//即将停止滚动事件方法
     8 
     9 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;//滚动停顿完成事件方法,滚动过程中减速停止后执行
    10 
    11 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view //开始缩放事件方法
    12 
    13 - (void)scrollViewDidZoom:(UIScrollView *)scrollView//缩放操作完成事件方法
    14 
    15 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; //返回缩放视图,注意只有实现这个代理方法才能进行缩放,此方法返回需要缩放的视图


     

  • 相关阅读:
    JSP中page和pageContext的区别
    exe4j生成的exe文件没有把jre文件也打进exe文件中
    exe4j将jar文件和jre文件打包成exe
    exe4j打包jar文件为exe文件出现的问题:The JAVA_HOME environment variable does not point to a working 32-bit JDK or JRE.
    JS作用域
    js 函数
    js数组
    js表达式和语句
    js操作符
    js注释和数据类型转换
  • 原文地址:https://www.cnblogs.com/xiaomoge/p/4196905.html
Copyright © 2020-2023  润新知