1. 程式人生 > >iOS開發滾動檢視UIScrollView

iOS開發滾動檢視UIScrollView

當手指觸控 後,ScrollView會暫時攔截觸控事件,並開啟一個計時器。假如在計時器到點後沒有發生手指移動事件,那麼ScrollView傳送、 tracking events到被點選的subview;假如在計時器到點前發生了移動事件,那麼ScrollView取消tracking,自己發生滾動。

初始化

  1. UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGMakeSize(0.0,0.0,self.view.frame.size.with,600)]; 

一、深入分析UIScrollView

1、由於移動裝置自身的限制,當某些檢視滾出可見範圍時,應該如何處理,如何重用可視的空間,減少記憶體的開銷。

2、UIScrollView是UITableView和UITextView的超類。它的核心理念:UIScrollView 是一個可以在內容檢視之上調整自己原點座標的檢視。它根據自身框架的大小,裁剪檢視中的內容。通常框架是和應用程式視窗一樣大。可以根據手指的移動,調整 原點的位置,這個原點位置就是滾動檢視的偏移量。展示內容的檢視會根據滾動檢視的原點位置,開始繪製檢視的內容。UIScrollView必須知道內容檢視的大小,以便於知道什麼時候停止,一般當滾動出內容的邊界時,它就返回了。

UIScrollView必須知道一個觸控訊號是打算滾動還是打算跟蹤裡面的子檢視。為了達到這個目的,它臨時中斷了一個touch-down事件,通過建立一個定時器,在定時器開始行動之前,看是否觸控的手指做了任何的移動。假如定時器執行中沒有任何的大的位置改變,UIScrollView就傳送一個跟蹤事件給觸控的子檢視;如果在定時器消失前,使用者拖動手指足夠遠,UIScrollView就取消子檢視的任何跟蹤事件,而滾動它自己。

子類可以通過過載touchesShouldBegin:withEvent:inContentView:、pagingEnabled和touchesShouldCancelInContentView:方法,從而影響滾動檢視的滾動手勢。

UIScrollView 類有一個delegate,需要適配的協議是UIScrollViewDelegate。為了縮放和平鋪工作,代理必須實現 viewForZoomingInScrollView:和scrollViewDidEndZooming:withView:atScale:方法。

在UIScrollView物件中,不應該嵌入任何UIWebView和UITableView,否則會出現一些異常情況,因為兩個物件的觸控事件可能被混合,從而被錯誤的處理。

二、UIScrollView簡單使用

1、拖動一個UIScrollView控制元件到IB,在上面新增6個標籤。設定第六個標籤在可見範圍外,可以直接設定座標值。如下圖所示:

2、將UIScrollView新增輸出口,設定為theScroller,其它保留預設。

3、支援滾動

為給可滾動檢視新增滾動功能,需要將屬性contentSize設定為一個CGSize值。CGSize是一個簡單的C語言資料結構,它包含高度和寬度,可使用函式CGSize(<with>,<height>)建立一個這樣的物件。

例如要告訴該可滾動檢視(theScroller)可水平和垂直分別滾動到280點和600點,可在viewDidLoad方法中編寫如下程式碼:

  1. self.theScroller.contentSize = CGSizeMake(280.0,600.0); 

注:我在測試的時候,沒有新增該行程式碼,但是執行的時候仍能滾動。。。

補充:

原來開始我認為的滾動,只是bounces(橡皮筋)屬性和IOS 6新增的AutoLayout屬性的作用,設定了AutoLayout,而bounces屬性預設是true的,當我按住鍵盤不放,往下滾動的時候,確實可以看到第六個標籤。

所以真正要讓ScrollView能夠滾動,還是需要去設定contentSize的。

4、執行效果

希望通過本文的簡單介紹,讀者朋友們對iOS開發中滾動檢視UIScrollView有了一個清晰的認識和理解。