iOS開發(fā)滾動視圖UIScrollView
滾動視圖UIScrollView在滾動過程當(dāng)中,其實是在修改坐標(biāo)原點。
當(dāng)手指觸摸 后,ScrollView會暫時攔截觸摸事件,并開啟一個計時器。假如在計時器到點后沒有發(fā)生手指移動事件,那么ScrollView發(fā)送、 tracking events到被點擊的subview;假如在計時器到點前發(fā)生了移動事件,那么ScrollView取消tracking,自己發(fā)生滾動。
初始化
- UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGMakeSize(0.0,0.0,self.view.frame.size.with,600)];
一、深入分析UIScrollView
1、由于移動設(shè)備自身的限制,當(dāng)某些視圖滾出可見范圍時,應(yīng)該如何處理,如何重用可視的空間,減少內(nèi)存的開銷。
2、UIScrollView是UITableView和UITextView的超類。它的核心理念:UIScrollView 是一個可以在內(nèi)容視圖之上調(diào)整自己原點坐標(biāo)的視圖。它根據(jù)自身框架的大小,裁剪視圖中的內(nèi)容。通??蚣苁呛蛻?yīng)用程序窗口一樣大??梢愿鶕?jù)手指的移動,調(diào)整 原點的位置,這個原點位置就是滾動視圖的偏移量。展示內(nèi)容的視圖會根據(jù)滾動視圖的原點位置,開始繪制視圖的內(nèi)容。UIScrollView必須知道內(nèi)容視圖的大小,以便于知道什么時候停止,一般當(dāng)滾動出內(nèi)容的邊界時,它就返回了。
UIScrollView必須知道一個觸摸信號是打算滾動還是打算跟蹤里面的子視圖。為了達(dá)到這個目的,它臨時中斷了一個touch-down事件,通過建立一個定時器,在定時器開始行動之前,看是否觸摸的手指做了任何的移動。假如定時器運行中沒有任何的大的位置改變,UIScrollView就發(fā)送一個跟蹤事件給觸摸的子視圖;如果在定時器消失前,用戶拖動手指足夠遠(yuǎn),UIScrollView就取消子視圖的任何跟蹤事件,而滾動它自己。
子類可以通過重載touchesShouldBegin:withEvent:inContentView:、pagingEnabled和touchesShouldCancelInContentView:方法,從而影響滾動視圖的滾動手勢。
UIScrollView 類有一個delegate,需要適配的協(xié)議是UIScrollViewDelegate。為了縮放和平鋪工作,代理必須實現(xiàn) viewForZoomingInScrollView:和scrollViewDidEndZooming:withView:atScale:方法。
在UIScrollView對象中,不應(yīng)該嵌入任何UIWebView和UITableView,否則會出現(xiàn)一些異常情況,因為兩個對象的觸摸事件可能被混合,從而被錯誤的處理。
二、UIScrollView簡單使用
1、拖動一個UIScrollView控件到IB,在上面添加6個標(biāo)簽。設(shè)置第六個標(biāo)簽在可見范圍外,可以直接設(shè)置坐標(biāo)值。如下圖所示:
2、將UIScrollView添加輸出口,設(shè)置為theScroller,其它保留默認(rèn)。
3、支持滾動
為給可滾動視圖添加滾動功能,需要將屬性contentSize設(shè)置為一個CGSize值。CGSize是一個簡單的C語言數(shù)據(jù)結(jié)構(gòu),它包含高度和寬度,可使用函數(shù)CGSize(<with>,<height>)創(chuàng)建一個這樣的對象。
例如要告訴該可滾動視圖(theScroller)可水平和垂直分別滾動到280點和600點,可在viewDidLoad方法中編寫如下代碼:
- self.theScroller.contentSize = CGSizeMake(280.0,600.0);
注:我在測試的時候,沒有添加該行代碼,但是運行的時候仍能滾動。。。
補充:
原來開始我認(rèn)為的滾動,只是bounces(橡皮筋)屬性和IOS 6新增的AutoLayout屬性的作用,設(shè)置了AutoLayout,而bounces屬性默認(rèn)是true的,當(dāng)我按住鍵盤不放,往下滾動的時候,確實可以看到第六個標(biāo)簽。
所以真正要讓ScrollView能夠滾動,還是需要去設(shè)置contentSize的。
4、運行效果
希望通過本文的簡單介紹,讀者朋友們對iOS開發(fā)中滾動視圖UIScrollView有了一個清晰的認(rèn)識和理解。