1.UIScrollView控件是什么
(1)移动设备的屏幕大小是有限的,因此直接展示在用户眼前的数据内容也是有限的
(2)当展示的内容过多,超出屏幕时,用户可以通过滚动手势来查看屏幕以外的内容
(3)普通的UIView不具备滚动功能,不能显示过多的内容
(4)UIScrollView是一个可以滚动的视图控件,可以展示大量内容,并且可以通过滚动手势查看所有内容
2. UIScrollView的简单使用
(1)将要展示的内容添加到UIScrollView中
(2)设置UIScrollView的contentSize属性,告诉UIScrollView所有内容的尺寸,也就是告诉UIScrollView滚动的范围(能滚多远,滚到哪里才是尽头)
3.属性
(1)常用属性:
1)@property(nonatomic)CGPointcontentOffset;这个属性?用来表?示UIScrollView滚动的位置
2)@property(nonatomic)CGSizecontentSize;这个属性?用来表?示UIScrollView内容的尺?寸,滚动范围(能滚多远)
3)@property(nonatomic)UIEdgeInsetscontentInset;这个属性能够在UIScrollView的4周增加额外的滚动区域
(2)其他属性:
1)@property(nonatomic)BOOL
bounces; 设置UIScrollView是否需要弹簧效果
2)@property(nonatomic,getter=isScrollEnabled)BOOLscrollEnabled;设置UIScrollView是否能滚动
3)@property(nonatomic)BOOL
showsHorizontalScrollIndicator; 是否显?示?水平滚动条
4)@property(nonatomic)BOOL
showsVerticalScrollIndicator; 是否显?示垂直滚动条
4.注意点
? 如果UIScrollView?无法滚动,可能是以下原因:
(1)没有设置contentSize
(2) scrollEnabled = NO
(3) 没有接收到触摸事件:userInteractionEnabled = NO
(4)没有取消autolayout功能(要想scrollView滚动,必须取消autolayout)
一、缩放
1.简单说明:
有些时候,我们可能要对某些内容进行手势缩放,如下图所示
UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理。也就是说,要完成缩放功能的话,只需要将需要缩放的内容添加到UIScrollView中
2.缩放原理
当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息,询问代理究竟要缩放自己内部的哪一个子控件(哪一块内容)
当用户在UIScrollView身上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件。
二、实现缩放功能
1.代码示例:
1 #import "YYViewController.h" 2 3 @interface YYViewController () <UIScrollViewDelegate> 4 { 5 UIScrollView *_scrollview; 6 UIImageView *_imageview; 7 } 8 @end 9 10 @implementation YYViewController 11 12 - (void)viewDidLoad 13 { 14 [super viewDidLoad]; 15 16 //1添加 UIScrollView 17 //设置 UIScrollView的位置与屏幕大小相同 18 _scrollview=[[UIScrollView alloc]initWithFrame:self.view.bounds]; 19 [self.view addSubview:_scrollview]; 20 21 //2添加图片 22 //有两种方式 23 //(1)一般方式 24 // UIImageView *imageview=[[UIImageView alloc]init]; 25 // UIImage *image=[UIImage imageNamed:@"minion"]; 26 // imageview.image=image; 27 // imageview.frame=CGRectMake(0, 0, image.size.width, image.size.height); 28 29 //(2)使用构造方法 30 UIImage *image=[UIImage imageNamed:@"minion"]; 31 _imageview=[[UIImageView alloc]initWithImage:image]; 32 //调用initWithImage:方法,它创建出来的imageview的宽高和图片的宽高一样 33 [_scrollview addSubview:_imageview]; 34 35 //设置UIScrollView的滚动范围和图片的真实尺寸一致 36 _scrollview.contentSize=image.size; 37 38 39 //设置实现缩放 40 //设置代理scrollview的代理对象 41 _scrollview.delegate=self; 42 //设置最大伸缩比例 43 _scrollview.maximumZoomScale=2.0; 44 //设置最小伸缩比例 45 _scrollview.minimumZoomScale=0.5; 46 47 } 48 49 //告诉scrollview要缩放的是哪个子控件 50 -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 51 { 52 return _imageview; 53 } 54 55 @end
2.代码说明
实现缩放功能的4个步骤
(1)为scrollview设置代理(self)
(2)让控制器遵守scrollview的代理协议
(3)调用代理方法,返回需要实现缩放功能的子控件
(4)设置缩放的范围(最大和最小比例)
3.思路:
a.需要告诉scrollview要缩放的时哪一个子控件,这里为scrollview内部的imageview控件
b.谁来告诉scrollview缩放哪一个控件?代理
三、补充知识
两种实例化UIImageView的方法:
第一种:
UIImageView *imageview=[[UIImageView alloc]init];
UIImage *image=[UIImage imageNamed:@"minion"];
imageview.image=image;
imageview.frame=CGRectMake(0, 0, image.size.width, image.size.height);
第二种:
UIImage *image=[UIImageimageNamed:@"minion"];
_imageview=[[UIImageViewalloc]initWithImage:image];
调用initWithImage:方法,它创建出来的imageview的宽高和图片的宽高一样
[_scrollviewaddSubview:_imageview];
四、跟缩放相关的其他代理方法
缩放完毕的时候调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
正在缩放的时候调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
三、委托方法
可以赋予滚动视图一个委托,下列委托方法会在特定时刻收到通知。
[java] view
plaincopy
- -(void)scrollViewDidScroll:(UIScrollView*)scrollView;//会在视图滚动时收到通知。包括一个指向被滚动视图的指针,从中可以读取contentOffset属性以确定其滚动到的位置。
[java] view
plaincopy
- -(void)scrollViewWillBeginDragging:(UISCrollView*)scrollView;//当用户首次在某个方向上进行拖动时得到通知。这个方法会得到被作为参数传递的滚动视图指针,也同样可以从中读取 contentOffset 属性。
[java] view
plaincopy
- -(void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate;
- //当用户抬起拖动到手指时得到通知。还会得到一个布尔值,知名报告滚动视图最后位置之前,是否需要减速。
[java] view
plaincopy
- -(void)scrollViewWillBeginDecelerate:(UIScrollView*)scrollView;//当用户抬起手指而视图需要继续移动时,会收到通知。这个方法可以用来读取 contentOffset属性,从而判断出当用户抬起手指钱最后一次滚动到的位置,虽然这个位置并不会使滚动条的最终停止位置。
[java] view
plaincopy
- -(void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView;//当上面提到的减速完毕、滚动视图停止时得到通知。收到这个通知的时刻,滚动视图的contentOffset属性会反映出滚动条最终停止的位置。
[java] view
plaincopy
- -(void)scrollViewDidEndZooming:(UIScrollview*)scrollView withView:(UIView*)view atScale:(float)scale;//当用户对内容进行缩放时,会收到通知。缩放比例表示为一个浮点值,会作为参数传递进来。
[java] view
plaincopy
- -(BOOL)scrollViewShouldScrollToTop:(UIScrollView*)scrollView;
- -(void)scrollViewDidScrollToTop:(UIScrollView*)scrollView;
- //当用户点出iPhone状态条时,滚动视图委托可以决定视图是否滚动回到开头。
OK,都总结完了,后面会写一个页面翻转的例子敬请关注。
属性 | 作用 |
CGPoint contentOffSet | 监控目前滚动的位置 |
CGSize contentSize | 滚动范围的大小 |
UIEdgeInsets contentInset | 视图在scrollView中的位置 |
id<UIScrollerViewDelegate>
delegate |
设置协议 |
BOOL directionalLockEnabled | 指定控件是否只能在一个方向上滚动 |
BOOL bounces | 控制控件遇到边框是否反弹 |
BOOL alwaysBounceVertical | 控制垂直方向遇到边框是否反弹 |
BOOL alwaysBounceHorizontal | 控制水平方向遇到边框是否反弹 |
BOOL pagingEnabled | 控制控件是否整页翻动 |
BOOL scrollEnabled | 控制控件是否能滚动 |
BOOL showsHorizontalScrollIndicator | 控制是否显示水平方向的滚动条 |
BOOL
showsVerticalScrollIndicator |
控制是否显示垂直方向的滚动条 |
UIEdgeInsets scrollIndicatorInsets | 指定滚动条在scrollerView中的位置 |
UIScrollViewIndicatorStyle
indicatorStyle |
设定滚动条的样式 |
float decelerationRate | 改变scrollerView的减速点位置 |
BOOL tracking | 监控当前目标是否正在被跟踪 |
BOOL dragging | 监控当前目标是否正在被拖拽 |
BOOL decelerating | 监控当前目标是否正在减速 |
BOOL delaysContentTouches | 控制视图是否延时调用开始滚动的方法 |
BOOL canCancelContentTouches | 控制控件是否接触取消touch的事件 |
float minimumZoomScale | 缩小的最小比例 |
float maximumZoomScale | 放大的最大比例 |
float zoomScale | 设置变化比例 |
BOOL bouncesZoom | 控制缩放的时候是否会反弹 |
BOOL zooming | 判断控件的大小是否正在改变 |
BOOL zoomBouncing | 判断是否正在进行缩放反弹 |
BOOL scrollsToTop | 控制控件滚动到顶部 |
参考链接:http://www.cnblogs.com/wendingding/p/3754268.html
http://blog.csdn.net/qijianli/article/details/7781918