iOSiOS

5月29日-UIScrollView,UIPageControl

2015-06-01  本文已影响275人  托马斯君

什么是UIScrollView?

移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限

当展示的内容较多,超出一个屏幕的时候,用户可通过滚动手势来查看屏幕以外的内容

普通的UIView不具备滚动功能,不适合显示过多的内容

UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容

UIScrollView的基本使用

UIScrollView的用法:

UIScrollView显示内容的细节

UIScrollView常见问题:无法滚动的解决办法

UIScrollView的常见属性

@property(nonatomic) CGPoint contenOffset;

@property(nonatomic) CGSize contenSize;

@property(nonatomic) UIEageInsets contenInset;

UIScrollView的其他属性

@property(nonatomic) BOOL bounces;

@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled

@property(nonatomic) BOOL showsHorizontalScrollIndicator;

@property(nonatomic) BOOL showsVerticalScrollIndicator;

UIScrollView的代理

我们想在UIScrollView正在滚动或者滚动到每个位置或者 停止滚动时做一些特定的操作

想要完成上述功能,前提条件就是能够监听到UIScrollView的整个滚动过程

当UIScrollView发生一系列的滚动操作时,会自动通知它的代理(delegate)对象,给代理发送相应的消息,让代理得知它的滚动情况

要像监听UIScrollView的滚动过程,就必须先给UIScrollView设置一个代理对象,然后通过代理对象监听UIScrollView的滚动过程

内容的缩放

有些时候,我们会想要对某些内容进行手势缩放

UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理

要完成缩放功能,只想要将想要缩放的内容添加到UIScrollView中

当用户在UIScrollView上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件

实现缩放步骤

分页

只要将UIScrollView的pagingEnabled属性设置为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叫做“定时器”,它的作用如下

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

// 每隔ti秒,调用一次aTarget的aSelector方法,yesOrNo决定了是否重复执行这个任务
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti                                                   target:(id)aTarget
                                  selector:(SEL)aSelector
                                  userInfo:(id)userInfo
                                  repeats:(BOOL)yesOrNo;

通过invalidate方法可以停止定时器的工作,一旦定时器被停止了,就不能再次执行任务。只能再创建一个新的定时器才能执行新的任务

- (void)invalidate;

解决定时器在主线程不工作的问题,有时候需要几个控件同时工作

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
上一篇 下一篇

猜你喜欢

热点阅读