iOS开发-UIScrollview

作者: Dyua | 来源:发表于2015-12-16 11:02 被阅读11994次

初识UIScrollView

什么是UIScrollView?

  • 移动设备的屏幕大小是极其有限的,当展示的内容较多的时候,超出一个屏幕时,用户可以通过滚动手势来查看屏幕以外的内容
  • UIScrollview是一个能够滚动的视图控件,可以用来展示大量的内容.

UIScrollView的基本使用

  • 将需要展示的内容添加到UIScrollview中
  • 设置UIScrollview的contentSize属性,告诉UIScrollview所内容的尺寸----就是滚动的范围
  • UIScrollview显示内容的小细节
  • 超出UIScrollview边框的内容会被自动隐藏
  • 用户可以用手势拖动来查看超出边框并被隐藏的内容

UIScrollView无法滚动的原因

  • 没有设置contentSize
  • scroEnabled = NO;
  • 没有接收到触摸事件:userInteractionEnabled = NO;

UIScrollView的属性

关于显示内容的

表示UIScrollView滚动的位置
(就是内容左上角与scrollView左上角的间距!!)
@property (nonatomic) CGPoint contentOffset;


表示UIScrollView内容的尺寸,滚动范围(能滚多远)
@property (nonatomic) CGSize contentSize;


在UIScrollView的四周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住
@property (nonatomic) UIEdgeInsets contentInset;

其他属性,效果or滚动条

设置UIScrollView是否需要弹簧效果
@property (nonatomic) BOOL bounces;


设置UIScrollView是否能滚动
@property (nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;


是否显示水平滚动条
@property (nonatomic) BOOL showsHorizontalScrollIndicator;



是否显示垂直滚动条
@property (nonatomic) BOOL showsVerticalScrollIndicator;

UIScrollView的代理

在很多时候我们需要知道UIScrollView滚动到了那里,它是否停止,那些时候来做一些特定的操作,要想完成那些特定的动作进行时的功能,前提就是能够监听到UIScrollView整个滚动的过程

要想监听整个UIScrollView的滚动过程,就必须给它设置一个代理对象,通过代理得知UIScrollView的滚动过程

UIScrollView和delegate的通信

  • UIScrollView和delegate的通信应该如下表:
手势 方法
开始拖拽 scrollViewWillBeginDragging:
具体到某个位置 scrollViewDidScroll:
用户停止拖拽 scrollViewDidEndDragging:willDecelerate:

UIScrollView需要实现的方法都定义在UIScrollViewDelegate协议中,遵守协议后,实现协议中的方法就可以监听UIScrollView的滚动过程

UIscrollView和控制器

  • 一般情况下,就设置UIScrollView所在的控制器为UIScrollView的delegate
  • 设置代理的方法有两种:
    • 通过代码来设置----self.scrollView.delegate = self;
    • 通过storyboard拖线

UIscrollView中内容的缩放

  • 原理:当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息,询问代理究竟要缩放自己内部哪一块
  • UIScrollView身上使用捏合手势时,调用viewForZoomingInScrollView:这个方法返回的控件就是需要进行缩放的控件

缩放实现步骤

  • 设置UIScrollView的id<UIScrollViewDelegate>delegate代理对象
  • 设置minimumZoomScale:缩小的最小的比例
  • 设置maximumZoomScale:放大的最大的比例
  • 让代理对象实现下面的方法,返回需要缩放的视图控件
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;

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

即将开始缩放的时候调用
    - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view;
    

正在缩放的时候调用

    - (void)scrollViewDidZoom:(UIScrollView *)scrollView;

分页

  • 只要将UIScrollViewpageEnable属性设置为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叫做定时器

  • 在制定的时间执行任务
  • 每隔一段时间执行指定的任务

调用下面的方法就会开启一个定时的任务

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeINterval)ti target:(id)aTarget selector:(SEL)aselector userInfo:(id)userInfo repeats :(BOOL)yes or no;


每隔ti秒,调用一次aTarget的aSelector方法,yesOrno决定了是否重复执行任务

- 解决定时器在主线程不工作的的问题
    
    NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(next) userInfo:nil repeats:YES];
    
    [[NSRunLoop mainRunLoop] addTimer:timer   forMode:NSRunLoopCommonModes];

相关文章

网友评论

    本文标题:iOS开发-UIScrollview

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