zoukankan      html  css  js  c++  java
  • iOS----UIScrollView

    UIScrollView
    什么是UIScrollView
    • 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也是相当有限
    • 当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容
    • 普通的UIView不具备滚动功能,不能显示过多的内容
    • UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容
     
    UIScrollView的基本使用
    UIScrollView的用法很简单:将需要展示的内容添加到UIScrollView中,并且设置UIScrollView的contentSize属性,告诉UIScrollView所有的内容的尺寸,也就是告诉它滚动的范围
     
    UIScrollView的代理(delegate)
    • 很多时候,我们想在UIScrollView正在滚动或滚动到某个位置或者停止滚动时做一些特定的操作
    • 要想完成上述功能,前提条件就是能够监听到UIScrollView的整个滚动过程
    • 当UIScrollView发生一系列的滚动操作时,会自动通知它的代理(delegate)对象,给它的代理发送相应的消息,让代理得知它的滚动情况
    • 也就是说,要想监听UIScrollView的滚动过程,就必须先给UIScrollView设置一个代理对象,然后通过代理得知UIScrollView的滚动过程
     
    UIScrollView和delegate的通信
    • 用户开始拖拽时,发送特定消息(调用:scrollViewWillBeginDragging:方法)
    • 具体滚动到某个位置时,发送特定消息(调用:scrollViewDidScroll:方法)
    • 用户停止拖拽时,发送特定消息(调用:scrollViewDidEndDragging:willDecelerate:方法)
    所以,想要成为UIScrollView的delegate,是有条件的,必须实现对应的方法,才能监听UIScrollView的滚动过程。
    UIScrollView将delegate需要实现的方法都定义在了UIScrollViewDelegate协议中,因此想要成为UIScrollView的delegate,必须遵守UIScrollViewDelegate协议,然后实现协议中的相应的方法,就可以监听UIScrollView的滚动过程了
    后记:两个对象要想实现通信,需要另一个对象遵守协议(即成为代理),实现协议的方法给对象调用。
     
    代理使用的步骤:
    1、代理遵守协议
    2、代理实现方法
    3、设置为某个对象的代理(一般使用控制器作为代理监听)(例如:self.scrollView.delegate=self;)
     
    UIScrollView的常见属性
    @property (nonatomic) CGPoint contentOffset;
    这个属性表示UIScrollView当前滚动的位置
     
    @property (nonatomic) CGSize contentSize;
    这个属性用来表示UIScrollView内容的尺寸,滚动范围
     
    @property (nonatomic) UIEdgeInsets contentInset;
    这个属性能够在UIScrollView的四周增加额外的滚动区域
     
    UIScrollView的其他属性
    @property (nonatomic) BOOL bounces;
    设置UIScrollView是否需要弹簧效果
     
    @property (nonatomic,getter=isScrollEnable) BOOL scrollEnabled;
    设置UIScrollView是否能滚动
     
    @property (nonatomic) BOOL showsHorizontalScrollIndicator;
    是否显示水平滚动条
     
    @property (nonatomic) BOOL showsVerticalScrollIndicator;
    是否显示垂直滚动条
     
    UIScrollView可以实现缩放功能
    当用户在UIScrollView中使用捏合手势时,UIScrollView会给代理发送一条消息,询问代理究竟要缩放自己内部的哪一个子控件
    即调用代理的-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;方法
    这个方法返回的就是要缩放的那个控件
    要想完成缩放,还要设置最大最小缩放比例
    缩放实现步骤:
    • 1.设置UIScrollView的Id<UIScrollViewDelegate>delegate代理对象
    • 2.设置minimumZoomScale:缩小的最小比例
    • 3.设置maxmumZoomScale:放大的最大比例
    • 4.让代理对象实现下面方法,返回需要缩放的视图控件
    -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
     
     
    分页
    只要将UIScrollView的pageEnable属性设置为YES,UIScrollView会被分割成多个独立页面,里面的内容就能进行分页展示
    一般会配合UIPageControl增强分页效果,UIPageControl常用属性如下:
    • 一共有多少页
    • @property (nonatomic)NSInteger numberOfPages;
     
    • 当前显示的页码
    • @property(nonatomic)NSInteger currentPage;
     
    • 只有一页时,是否需要隐藏页码指示器
    • @property(nonatomic)BOOL hidesForSinglePage;
     
    • 其他页码指示器颜色
    • @property (nonatomic,retain)UIColor *pageIndicatorTintColor;
     
    • 当前页码指示器颜色
    • @property (nonatomic,retain)UIColor *currentPageIndicatorTintColor;
     
     
     
    NSTimer
    NSTimer叫做“定时器”,它的作用如下:
    • 在指定的时间执行执行的任务
    • 每隔一段时间执行指定的任务
     
    使用定时器
    定时器一旦被停止就相当于废弃掉了,如果再需要使用,需要重新创建一个定时器
    在ios中处理ui和触摸事件的线程一般为主线程,如果在使用定时器的时候,发生了触摸事件,那么线程会去响应触摸事件,所以我们如果想要即处理触摸事件,又处理定时器时,就需要设置定时器的优先级
    使用-(void)invalidate方法可以停止定时器
     
  • 相关阅读:
    Tornado @tornado.gen.coroutine 与 yield
    ThreadPoolExecutor执行任务,异常日志缺失问题
    Mybatis关联查询<association> 和 <collection>
    Spring整合mybatis
    Jedis操作Redis--Key操作
    Jedis操作Redis--SortedSet类型
    Jedis操作Redis--Set类型
    同义词 “stop from”,“keep from”和“prevent from”的区别
    test
    Python win32gui调用窗口到最前面
  • 原文地址:https://www.cnblogs.com/hqzxbb/p/4480057.html
Copyright © 2011-2022 走看看