一讨彼、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
監(jiān)控目前控件滾動的位置
CGSize contentSize
滾動范圍的大小
UIEdgeInserts contentInsert
設置ScrollView的四周邊距
id<UIScrollerViewDelagate>delagate
設置協(xié)議
BOOL showsHorizontalScrollIndicator
控制是否顯示水平方向的滾動條
BOOL showsVerticalScrollIndicator
控制是否顯示垂直方向的滾動條
float minimumZoomScale
縮小的最小比例
float maximumZoomScale
放大的最大比例
BOOL bouncesZoom
控制縮放的時候是否會反彈
1.4.幾個常用屬性示意圖
<p></p>
<p>
<p></p>
<p>
<p>
<p>
<p>
1.5.如果無法滾動,可能存在以下原因
? 沒有設置contentSize
? scrollEnable = NO
? 沒有接收到觸摸事件:userInteractionEnabled = NO
? 沒有取消autolayout功能棵红。其實也可以用另一種方法代替取消autolayout功能危融。如下
在控制器的View當中寫上這一句代碼.
self.view.translatesAutoresizingMaskIntoConstraints = NO;
在自動布局的時候,它會自動轉一個東西.
它會把你的auotSize轉換成自動布局設置這句話告訴它不要將autosizing轉換成自動布局.
1.6.容易錯誤理解的地方
(1)UIScrollView的frame與contentsize屬性的區(qū)分:
UIScrollView的frame指的是這個scrollview的可視范圍
(可看見的區(qū)域)渡八,contentsize是其滾動范圍。
(2)contentinset(不帶*號的一般不是結構體就是枚舉)
為UIScrollView增加額外的滾動區(qū)域碾盐。(上,左揩局,下毫玖,右)逆時針。
contentinset可以使用代碼或者是視圖控制器進行設置凌盯,但兩者有區(qū)別(注意區(qū)分)付枫。
(3)contentsize屬性只能使用代碼設置。
(4)contentoffset是個CGpoint類型的結構體十气,用來記錄ScrollView的滾動位置励背,
即記錄著“框”跑到了哪里。
知道了這個屬性砸西,就知道了其位置叶眉,可以通過設置這個屬性來控制這個“框”的移動。
(5)不允許直接修改某個對象內部結構體屬性的成員芹枷,
三個步驟(先拿到值衅疙,修改之,再把修改后的值賦回去)鸳慈。
(6)增加了額外區(qū)域后饱溢,contentoffset的原點在哪里?實際上是不包括額外區(qū)域的走芋。
二绩郎、UIScrollView的代理(delegate)
?很多時候潘鲫,我們想在UIScrollView正在滾動 或 滾動到某個位置
或者 停止?jié)L動 時做一些特定的操作
?要想完成上述功能,前提條件就是能夠監(jiān)聽到UIScrollView的整個滾動過程
?當UIScrollView發(fā)生一系列的滾動操作時肋杖, 會自動通知它的代理(delegate)對象溉仑,
給它的代理發(fā)送相應的消息,讓代理得知它的滾動情況
?也就是說状植,要想監(jiān)聽UIScrollView的滾動過程浊竟,
就必須先給UIScrollView設置一個代理對象,
然后通過代理得知UIScrollView的滾動過程
注:要想成為UIScrollView的delegate津畸,是有條件的振定,必須遵守相應的 協(xié)議
實現(xiàn)對應的方法才能監(jiān)聽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叫做“定時器”,它的作用如下
?在指定的時間執(zhí)行指定的任務
?每隔一段時間執(zhí)行指定的任務
? 調用下面的方法就會開啟一個定時任務
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)time
target:(id)aTarget
selector:(SEL)aSelector
userInfo:(id)userInfo
repeats:(BOOL)yesOrNo;
每隔time秒丧肴,調用一次aTarget的aSelector方法残揉,yesOrNo決定了是否重復執(zhí)行這個任務
? 通過invalidate方法可以停止定時器的工作,一旦定時器被停止了芋浮,就不能再次執(zhí)行任務抱环。
只能再創(chuàng)建一個新的定時器才能執(zhí)行新的任務
- (void)invalidate;
五、UIScrollView控件實現(xiàn)圖片縮放
5.1.關于縮放
有些時候纸巷,我們可能要對某些內容進行手勢縮放镇草,如下圖
UIScrollView不僅能滾動顯示大量內容,還能對其內容進行縮放處理瘤旨。
也就是說梯啤,要完成縮放功能的話,只需要將需要縮放的內容添加到UIScrollView存哲、
5.2.縮放原理
當用戶在UIScrollView身上使用捏合手勢時因宇,UIScrollView會給代理發(fā)送一條消息,
詢問代理究竟要縮放自己內部的哪一個子控件(哪一塊內容)
當用戶在UIScrollView身上使用捏合手勢時祟偷,
UIScrollView會調用代理的viewForZoomingInScrollView:方法
這個方法返回的控件就是需要進行縮放的控件察滑。
5.3.實現(xiàn)縮放功能
(1)控制器遵守代理協(xié)議<UIScrollView>
(2)設置代理
(3)調用代理方法,返回需要實現(xiàn)縮放功能的子控件
(4)設置縮放的范圍(最大和最小比例)
//當用戶開始使用捏合手勢的時候
-(UIView *)viewForZoomingInScrolllView:(UIScrollView *)scrollView
{
//返回的控件就是需要縮放的
return self.mimoView; //mimoView控件已經設置為一個屬性
}
//正在使用捏合手勢
-(void)scrollViewDidZoom:(UIScrollView *)scrollview{
}