[iOS基础控件 - 5.1] UIScrollView
2014-11-29 03:48
295 查看
A.需要掌握
UIScrollView 是一个能够滚动的视图控件,可以用来展示大量内容,如手机的“设置”
1.常见属性
2.常用代理方法
3.缩放
4.UIScrollView和UIPageControl的分页
5.NSTime的使用
B.UIScrollView概念与使用
练习:显示大图,以原始尺寸显示一张图片,可以滚动查看图片的各个部分
原图: 900 x 1305
![](http://images.cnitblog.com/blog/648473/201411/290348389491616.png)
1.拖入UIScrollView,加入一个ImageView,设置图片,设置图片尺寸
![](http://images.cnitblog.com/blog/648473/201411/290348397157513.png)
![](http://images.cnitblog.com/blog/648473/201411/290351429652463.png)
在controller中获取到scrollView和图片控件
![](http://images.cnitblog.com/blog/648473/201411/290348437318054.png)
2.使用代码设置UIScrollView的 contentSize 属性,这是用来设置滚动范围的
3.如果UIScrollView不能滚动,可能原因如下:
(1)没有设置contentSize
(2)scrollEnable = NO
(3)没有接收到触摸事件:userInteractionEnable = NO
(4)没有取消autolayout
拖动:
![](http://images.cnitblog.com/blog/648473/201411/290351456846733.png)
6.UIScrollView常见属性
(1)各类位置、尺寸:
![](http://images.cnitblog.com/blog/648473/201411/290348503568663.png)
(2)额外边距 Insets
![](http://images.cnitblog.com/blog/648473/201411/290351479029088.png)
![](http://images.cnitblog.com/blog/648473/201411/290351498711286.png)
(3)移动图片
![](http://images.cnitblog.com/blog/648473/201411/290351532626184.png)
7.其他属性
8.代理delegate
(1)用处:
监听思想:让一个对象A监听另一个对象B的状态
通知思想:一个对象B状态发生了改变,要通知对象A
这里A是B的代理,谁想监听,谁就是代理
(2)使用UIScrollView内部的delegate对象,监听事件,实现图片大小的不断转换
(3)UIScrollView的代理(delegate)的任务:
设置UIScrollView在滚动过程某个特定位置、事件做一些特定的操作
必须监听整个滚动过程
发生滚动时,发送消息(调用方法)代理(delegate)对象
所以需要给UIScrollView设置一个delegate成员
所以要称为UIScrollView的delegate必须实现以上方法,这些方法声明在了UIScrollViewDelegate协议中,即要成为UIScrollView的delegate,必须遵守UIScrollViewDelegate协议。
(4)设置delegate三步骤:
a.直接使用当前控制器作为delegate
b.指定UIScrollView的delegate
c.delegate实现方法
i.例如针对拖曳滚动的3个方法:
ii.针对手势缩放的3个方法
iii.拖曳后的减速(2个方法)
9.手势缩放
UIScrollView不仅能够滚动显示大量内容,还能对其内容进行缩放,所以只需要把要缩放的图片放到UIScrollView中。
一次只能缩放一个子控件,UIScrollView通过使用delegate调用手势方法,返回的就是指定要缩放的控件
这个方法返回的就是需要进行缩放的控件
设置minimumZoomScale:缩小的最小比例
设置maximumZoomScale:放大的最大比例
实现步骤:
(1)实现手势调用方法
(2)设置缩放比例
(3)效果
a.缩小
![](http://images.cnitblog.com/blog/648473/201411/290351552624840.png)
b.放大
![](http://images.cnitblog.com/blog/648473/201411/290351574817195.png)
10.分页
例子就是桌面的APP列表,当APP数量超过一个屏幕,自动进行分页
设置属性pageEnable = YES,UIScrollView会被分割成多个独立页面,进行分页显示
一般使用UIPageControl增强效果,UIPageControl常见属性:
11.NSTimer
定时器,功能:
在指定的时间执行指定的任务
每隔一段时间执行指定的任务
(1)调用以下方法开启定时任务,然后调用 fire 方法执行:
每间隔ti秒执行一次aSelector方法,yesOrNo是否重复执行
(2)调用一下方法创建NSTimer,不用调用 fire 就会运行
(3)通过invalidate方法可以停止定时器的工作,但是不能再次执行,只能再重新创建一个新的定时器
另外有两个类可以做定时任务:
NSTimer:适合时间间隔比较大
CADisplayLink:适合频率比较高,做游戏动画用
(4)定时器在单线程下存在的问题
UI界面只能使用主线程刷新,如果使用阻断手段(例如定时器触发画面滑动,但是可以手动干扰画面移动),干扰定时器的运行,就会阻止定时器的事件触发,被阻止的事件累积之后会在线程资源得到解放之后触发。
解决:当出现阻断手段阻止了定时器触发的时候,回收定时器,等得到线程资源之后再重新创建定时器。
UIScrollView 是一个能够滚动的视图控件,可以用来展示大量内容,如手机的“设置”
1.常见属性
2.常用代理方法
3.缩放
4.UIScrollView和UIPageControl的分页
5.NSTime的使用
B.UIScrollView概念与使用
练习:显示大图,以原始尺寸显示一张图片,可以滚动查看图片的各个部分
原图: 900 x 1305
![](http://images.cnitblog.com/blog/648473/201411/290348389491616.png)
1.拖入UIScrollView,加入一个ImageView,设置图片,设置图片尺寸
![](http://images.cnitblog.com/blog/648473/201411/290348397157513.png)
![](http://images.cnitblog.com/blog/648473/201411/290351429652463.png)
在controller中获取到scrollView和图片控件
![](http://images.cnitblog.com/blog/648473/201411/290348437318054.png)
2.使用代码设置UIScrollView的 contentSize 属性,这是用来设置滚动范围的
// 设置滚动范围,这里用图片实际大小 self.scrollView.contentSize = self.imageView.frame.size;
3.如果UIScrollView不能滚动,可能原因如下:
(1)没有设置contentSize
(2)scrollEnable = NO
(3)没有接收到触摸事件:userInteractionEnable = NO
(4)没有取消autolayout
拖动:
![](http://images.cnitblog.com/blog/648473/201411/290351456846733.png)
6.UIScrollView常见属性
// 表示滚动位置,相对于初始位置 @property(nonatomic) CGPoint contentOffset; // 表示尺寸、滚动范围 @property(nonatomic) CGSize contentSize; // 这个属性能够增加四周额外的滚动范围 @property(nonatomic) UIEdgeInsets contentInset;
(1)各类位置、尺寸:
![](http://images.cnitblog.com/blog/648473/201411/290348503568663.png)
(2)额外边距 Insets
// 增加边距显示,参数分别是top, left, bottom, right self.scrollView.contentInset = UIEdgeInsetsMake(10, 20, 40, 80);
![](http://images.cnitblog.com/blog/648473/201411/290351479029088.png)
![](http://images.cnitblog.com/blog/648473/201411/290351498711286.png)
(3)移动图片
// 移动到(200, 300)位置 self.scrollView.contentOffset = CGPointMake(200, 300);
![](http://images.cnitblog.com/blog/648473/201411/290351532626184.png)
7.其他属性
// 是否需要弹簧效果 @property(nonatomic) BOOL bounces; // 是否能够滚动 @property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled; // 显示水平滚动条 @property(nonatomic) BOOL showsHorizontalScrollIndicator; // 显示垂直滚动条 @property(nonatomic) BOOL showsVerticalScrollIndicator;
8.代理delegate
(1)用处:
监听思想:让一个对象A监听另一个对象B的状态
通知思想:一个对象B状态发生了改变,要通知对象A
这里A是B的代理,谁想监听,谁就是代理
(2)使用UIScrollView内部的delegate对象,监听事件,实现图片大小的不断转换
@property(nonatomic,assign) id<UIScrollViewDelegate> delegate; // default nil. weak reference
(3)UIScrollView的代理(delegate)的任务:
设置UIScrollView在滚动过程某个特定位置、事件做一些特定的操作
必须监听整个滚动过程
发生滚动时,发送消息(调用方法)代理(delegate)对象
所以需要给UIScrollView设置一个delegate成员
所以要称为UIScrollView的delegate必须实现以上方法,这些方法声明在了UIScrollViewDelegate协议中,即要成为UIScrollView的delegate,必须遵守UIScrollViewDelegate协议。
(4)设置delegate三步骤:
a.直接使用当前控制器作为delegate
#import <UIKit/UIKit.h> @interface ViewController : UIViewController <UIScrollViewDelegate> @end
b.指定UIScrollView的delegate
self.scrollView.delegate = self;
c.delegate实现方法
i.例如针对拖曳滚动的3个方法:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { NSLog(@"开始拖曳"); } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"正在拖曳"); } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { NSLog(@"结束拖曳"); }
ii.针对手势缩放的3个方法
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { NSLog(@"开始缩放"); } - (void)scrollViewDidZoom:(UIScrollView *)scrollView { NSLog(@"正在缩放"); } - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale { NSLog(@"结束缩放"); }
iii.拖曳后的减速(2个方法)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { NSLog(@"拖曳完成后减速开始"); } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { NSLog(@"拖曳完成后减速完成"); }
9.手势缩放
UIScrollView不仅能够滚动显示大量内容,还能对其内容进行缩放,所以只需要把要缩放的图片放到UIScrollView中。
一次只能缩放一个子控件,UIScrollView通过使用delegate调用手势方法,返回的就是指定要缩放的控件
// 捏合手势调用的方法 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
这个方法返回的就是需要进行缩放的控件
设置minimumZoomScale:缩小的最小比例
设置maximumZoomScale:放大的最大比例
实现步骤:
(1)实现手势调用方法
// 图片 @property (weak, nonatomic) IBOutlet UIImageView *imageView; // 缩放手势调用的方法 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.imageView; // 需要放大的ImageView }
(2)设置缩放比例
self.scrollView.maximumZoomScale = 2.0; self.scrollView.minimumZoomScale = 0.1;
(3)效果
a.缩小
![](http://images.cnitblog.com/blog/648473/201411/290351552624840.png)
b.放大
![](http://images.cnitblog.com/blog/648473/201411/290351574817195.png)
10.分页
例子就是桌面的APP列表,当APP数量超过一个屏幕,自动进行分页
设置属性pageEnable = YES,UIScrollView会被分割成多个独立页面,进行分页显示
一般使用UIPageControl增强效果,UIPageControl常见属性:
// 总页数 @property(nonatomic) NSInteger numberOfPages; // default is 0 // 当前页码 @property(nonatomic) NSInteger currentPage; // 只有一页的时候隐藏页码 @property(nonatomic) BOOL hidesForSinglePage; // hide the the indicator if there is only one page. default is NO // 其他页码指示颜色 @property(nonatomic,retain) UIColor *pageIndicatorTintColor; // 当前页码指示颜色 @property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;
11.NSTimer
定时器,功能:
在指定的时间执行指定的任务
每隔一段时间执行指定的任务
(1)调用以下方法开启定时任务,然后调用 fire 方法执行:
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo; - (void)fire;
每间隔ti秒执行一次aSelector方法,yesOrNo是否重复执行
(2)调用一下方法创建NSTimer,不用调用 fire 就会运行
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
(3)通过invalidate方法可以停止定时器的工作,但是不能再次执行,只能再重新创建一个新的定时器
// 永久终止工作 - (void)invalidate;
另外有两个类可以做定时任务:
NSTimer:适合时间间隔比较大
CADisplayLink:适合频率比较高,做游戏动画用
(4)定时器在单线程下存在的问题
UI界面只能使用主线程刷新,如果使用阻断手段(例如定时器触发画面滑动,但是可以手动干扰画面移动),干扰定时器的运行,就会阻止定时器的事件触发,被阻止的事件累积之后会在线程资源得到解放之后触发。
解决:当出现阻断手段阻止了定时器触发的时候,回收定时器,等得到线程资源之后再重新创建定时器。
相关文章推荐
- iOS开发UI基础—17UIScrollView控件实现图片缩放功能
- 【iOS基础控件 - 7.1 】【demo】iOS基础控件之 UIScrollView
- [iOS基础控件 - 5.2] 查看大图、缩放图片代码(UIScrollView制作)
- 【iOS基础控件 - 7】 广告图片轮播器 <UIScrollView>
- iOS开发UI基础—29UIScrollView控件实现图片轮播
- ios 基础控件系列之 UIScrollView 初识
- iOS基础控件:UIScrollView 之三大属性 contentOffset 、contentSize 、contentInset 之间的区别
- [iOS基础控件 - 5.3] 电台APP可滚动主界面(UIScrollView制作)
- [iOS基础控件 - 5.4] 广告分页代码(UIScrollView制作)
- 【IOS控件详解】之UIScrollView
- IOS开发(18)之UIScrollView控件
- IOS开发笔记(五)---基础控件的使用(Text Filed ,Image View,Slider等)
- iOS基础控件-UIImageView,图片视图,配合点击手势,点击一个图片,开始动画
- IOS开发之UIScrollView控件详解
- iOS开发UI篇—UIScrollView控件实现图片轮播
- IOS开发UIScrollView控件详解
- 【ios控件】UIScrollView 事件说明
- iOS开发UI篇—UIScrollView控件介绍
- iOS开发UI篇—UIScrollView控件实现图片缩放功能
- IOS开发UIScrollView控件详解