1. 程式人生 > >ios之UIScrollerView滾動檢視

ios之UIScrollerView滾動檢視

UIScrollView 類負責所有基於 UIKit 的滾動操作。

一、建立

  1. CGRect bounds = [ [ UIScreen mainScreen ] applicationFrame ] ;  
  2. UIScrollView* scrollView = [ [UIScrollView alloc ] initWithFrame:bounds ];  
當你建立完滾動檢視後,你可以將另一個檢視的內容粘合到滾動檢視的空白頁上。這回建立一個滾動的內容視窗:
  1. [ scrollView addSubview:myView];   
你必須給出內容的實際大小,這樣滾動檢視才知道滾動的範圍:
  1. scrollView.contentSize = myView.frame.size;  
要開啟縮放功能需要調整檢視的兩個屬性,分別是maxinumZoomScale 和 mininumZoomScale 。這樣就可以允許使用者使用捏合手勢調整內容大小:
  1. scrollView.maxinumZoomScale = 2.0;//允許放大2倍
  2. scrollView.mininumZoomScale = 0.5;//允許放大到0.5倍
要開啟縮放功能,你還需要增加一個UIScrollViewDelegate 代理,通過一個名為 viewForZoomingScrollView

的方法做出響應。這個方法會返回進行縮放時所使用的 UIView 物件:

  1. scrollView.delegate = self;  
  2. - (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView{  
  3. <span style="white-space:pre">    </span>retutn myView;  
  4. }  
Tips:對於大規模資料,你可能會在最初使用一個低於實際大小(1.0)的縮放比例,讓使用者可以平滑地進行放大。

二、屬性

除了上面用到的縮放屬性外,滾動檢視還有會讓你多其他屬性,可以對現實內容的行為進行微調。你可以對 UIScrollView 類進行多方位定製。下面這些屬性是最常用的。

1.indicatorStyle

指定你希望使用的滾動條指示器的型別。預設行為是在白邊界上繪製黑色的滾動條,這在大多數背景下都適用。可用風格如下:

  1. UIScrollViewIndicatorStyleDefault  
  2. UIScrollViewIndicatorStyleBlack  
  3. UIScrollViewIndicatorStyleWhite  
2.contentOffset

一個CGPoint結構,其中包含有要顯示內容相對於視窗左上角的偏移量。預設是從0×0開始的,但是你也可以將顯示內容放在其他位置。

3.directionalLockEnabled

預設行為是允許使用者同時進行橫向和縱向的滾動。將這個屬性設定為YES會導致將使用者的滾動行為鎖定成只允許橫向或縱向進行,具體方向由初始姿態決定。

4.bounces

當用戶抵達滾動區域邊緣時,這個功能允許使用者稍微拖動到邊界外一點。當用戶鬆開手指後,這個區域會像個橡皮筋一樣,彈回到原位,給使用者一個可見的提示,表示他已經到達了文件開始或結束位置。如果不想讓使用者的滾動範圍能夠超出可見內容,可以將這個屬性設定為NO。

5.bouncesZoom

類似於bounces 選項,這個方法可以令使用者的縮放操作超出最大或最小縮放級別,然後彈回到範圍以內。如果你不想讓使用者能夠超出你指定的範圍進行縮放,將這個屬性設定為NO。

6.pagingEnabled

當開啟了分頁功能時,滾動檢視被分割成多個獨立區段,二使用者的滾動體驗則變成了頁面翻轉,你可以用這個屬性來進行頁面翻轉。

三、委託方法

可以賦予滾動檢視一個委託,下列委託方法會在特定時刻收到通知。

  1. -(void)scrollViewDidScroll:(UIScrollView*)scrollView;//會在檢視滾動時收到通知。包括一個指向被滾動檢視的指標,從中可以讀取contentOffset屬性以確定其滾動到的位置。
  1. -(void)scrollViewWillBeginDragging:(UISCrollView*)scrollView;//當用戶首次在某個方向上進行拖動時得到通知。這個方法會得到被作為引數傳遞的滾動檢視指標,也同樣可以從中讀取 contentOffset 屬性。
  1. -(void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate;  
  2. //當用戶擡起拖動到手指時得到通知。還會得到一個布林值,知名報告滾動檢視最後位置之前,是否需要減速。
  1. -(void)scrollViewWillBeginDecelerate:(UIScrollView*)scrollView;//當用戶擡起手指而檢視需要繼續移動時,會收到通知。這個方法可以用來讀取 contentOffset屬性,從而判斷出當用戶擡起手指錢最後一次滾動到的位置,雖然這個位置並不會使滾動條的最終停止位置。
  1. -(void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView;//當上面提到的減速完畢、滾動檢視停止時得到通知。收到這個通知的時刻,滾動檢視的contentOffset屬性會反映出滾動條最終停止的位置。
  1. -(void)scrollViewDidEndZooming:(UIScrollview*)scrollView withView:(UIView*)view atScale:(float)scale;//當用戶對內容進行縮放時,會收到通知。縮放比例表示為一個浮點值,會作為引數傳遞進來。
  1. -(BOOL)scrollViewShouldScrollToTop:(UIScrollView*)scrollView;  
  2. -(void)scrollViewDidScrollToTop:(UIScrollView*)scrollView;  
  3. //當用戶點出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 控制控制元件滾動到頂部