关情纸尾---UIkit基础-UIScrollView

一、UIScrolllView控件的简单介绍

1.1.什么是UIScrollView
(1)移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限
(2)当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容
(3)普通的UIView不具备滚动功能,不能显示过多的内容
(4)UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,
    并且可以通过滚动查看所有的内容
(5)举例:手机上的“设置”、其他示例程序 
1.2.UIScrollView的简单使用方法
(1)将需要展示的内容添加到UIScrollView中
(2)设置UIScrollView的contentSize属性,告诉UIScrollView所有内容的尺寸
    也就是告诉 它滚动的范围(能滚多远,滚到哪里是尽头) 
1.3.UIScrollView的常用属性
CGPoint contentOffSet
监控目前控件滚动的位置

CGSize contentSize
滚动范围的大小

UIEdgeInserts contentInsert
设置ScrollView的四周边距

iddelagate
设置协议

BOOL showsHorizontalScrollIndicator
控制是否显示水平方向的滚动条

BOOL showsVerticalScrollIndicator
控制是否显示垂直方向的滚动条

float minimumZoomScale
缩小的最小比例

float maximumZoomScale
放大的最大比例

BOOL bouncesZoom
控制缩放的时候是否会反弹
1.4.几个常用属性示意图






关情纸尾---UIkit基础-UIScrollView_第1张图片


1.5.如果无法滚动,可能存在以下原因
♥ 没有设置contentSize
♥ scrollEnable = NO
♥ 没有接收到触摸事件:userInteractionEnabled = NO
♥ 没有取消autolayout功能。其实也可以用另一种方法代替取消autolayout功能。如下
 
在控制器的View当中写上这一句代码.
self.view.translatesAutoresizingMaskIntoConstraints = NO;
在自动布局的时候,它会自动转一个东西.
它会把你的auotSize转换成自动布局设置这句话告诉它不要将autosizing转换成自动布局.
1.6.容易错误理解的地方
(1)UIScrollView的frame与contentsize属性的区分:
    UIScrollView的frame指的是这个scrollview的可视范围
   (可看见的区域),contentsize是其滚动范围。
(2)contentinset(不带*号的一般不是结构体就是枚举)
    为UIScrollView增加额外的滚动区域。(上,左,下,右)逆时针。
    contentinset可以使用代码或者是视图控制器进行设置,但两者有区别(注意区分)。
(3)contentsize属性只能使用代码设置。
(4)contentoffset是个CGpoint类型的结构体,用来记录ScrollView的滚动位置,
     即记录着“框”跑到了哪里。
     知道了这个属性,就知道了其位置,可以通过设置这个属性来控制这个“框”的移动。
(5)不允许直接修改某个对象内部结构体属性的成员,
    三个步骤(先拿到值,修改之,再把修改后的值赋回去)。
(6)增加了额外区域后,contentoffset的原点在哪里?实际上是不包括额外区域的。

二、UIScrollView的代理(delegate)

♦很多时候,我们想在UIScrollView正在滚动 或 滚动到某个位置 
 或者 停止滚动 时做一些特定的操作

♦要想完成上述功能,前提条件就是能够监听到UIScrollView的整个滚动过程
 
♦当UIScrollView发生一系列的滚动操作时, 会自动通知它的代理(delegate)对象,
 给它的代理发送相应的消息,让代理得知它的滚动情况
 
♦也就是说,要想监听UIScrollView的滚动过程,
  就必须先给UIScrollView设置一个代理对象,
  然后通过代理得知UIScrollView的滚动过程
 注:要想成为UIScrollView的delegate,是有条件的,必须遵守相应的   协议
 实现对应的方法才能监听UIScrollView的滚动过程 

三、分页

•只要将UIScrollView的pageEnabled属性设置为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)time
                                     target:(id)aTarget 
                                   selector:(SEL)aSelector 
                                   userInfo:(id)userInfo
                                    repeats:(BOOL)yesOrNo;
每隔time秒,调用一次aTarget的aSelector方法,yesOrNo决定了是否重复执行这个任务
 
♦ 通过invalidate方法可以停止定时器的工作,一旦定时器被停止了,就不能再次执行任务。
只能再创建一个新的定时器才能执行新的任务
- (void)invalidate;

五、UIScrollView控件实现图片缩放

5.1.关于缩放
有些时候,我们可能要对某些内容进行手势缩放,如下图
关情纸尾---UIkit基础-UIScrollView_第2张图片
UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理。
也就是说,要完成缩放功能的话,只需要将需要缩放的内容添加到UIScrollView、
5.2.缩放原理
当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息,
询问代理究竟要缩放自己内部的哪一个子控件(哪一块内容)
关情纸尾---UIkit基础-UIScrollView_第3张图片
当用户在UIScrollView身上使用捏合手势时,
UIScrollView会调用代理的viewForZoomingInScrollView:方法
这个方法返回的控件就是需要进行缩放的控件。
5.3.实现缩放功能
(1)控制器遵守代理协议 
(2)设置代理
(3)调用代理方法,返回需要实现缩放功能的子控件
(4)设置缩放的范围(最大和最小比例)

//当用户开始使用捏合手势的时候
-(UIView *)viewForZoomingInScrolllView:(UIScrollView *)scrollView
{
  //返回的控件就是需要缩放的
  return self.mimoView;    //mimoView控件已经设置为一个属性
}


//正在使用捏合手势
-(void)scrollViewDidZoom:(UIScrollView *)scrollview{
}

你可能感兴趣的:(关情纸尾---UIkit基础-UIScrollView)