iOS中UIScollView的總結
在iOS開發中可以說UIScollView是所有滑動類視圖的基礎,包括UITableView,UIWebView,UICollectionView等等,UIScrollView類為顯示大於應用程序窗口的內容提供支持。它使得用戶可以使用滑動手勢來滾動,並可以使用擴張/收縮手勢來放大縮小部分內容。UIScrollView類可以擁有一個代理,該代理采用UIScrollViewDelegate協議。對於縮放的工作,代理必須實現viewForZoomingInScrollView:以及scrollViewDidEndZooming:withView:atScale:;此外,最大(maximumZoomScale)和最小(minimumZoomScale)縮放規模必須不同。
其中有很多常用到的屬性設置和方法,在這里統一做下記錄。
屬性
automaticallyAdjustsScrollViewInsets
設置UITextView或者UITableView時,文字上方或table上總會留一片空白區域,原因在於navigation bar!!!
凡是繼承UIScrollView的控件都會受到UIViewController的這個automaticallyAdjustsScrollViewInsets屬性的影響,默認為YES,當有navigation bar的時候,UITextView的表現就是上面空白,設為NO,UITextView就正常了。
如果用了storyboard,那么也可以在storyboard里面做更改
alwaysBounceHorizontal
布爾值,規定是否在水平方向在滾動到末尾時產生“反彈”。
若該屬性及bounces被設定為YES,水平拖拽即使在內容小於滾動視圖邊緣時也被允許。默認值為NO。
alwaysBounceVertical
布爾值,規定是否在垂直方向在滾動到末尾時產生“反彈”。
若該屬性及bounces被設定為YES,垂直拖拽即使在內容小於滾動視圖邊緣時也被允許。默認值為NO。
bounces
布爾值,控制是否滾動視圖能否超出內容邊緣再彈回。
若該屬性的值為YES。滾動視圖會在遇到內容邊緣時反彈。若值為NO,滾動會在達到邊緣時立即停止而不反彈。默認值為YES。
bouncesZoom
布爾值,規定滾動視圖是否在縮放超出最大值和最小值動畫時播放內容縮放動畫。
若該屬性的值為YES,在縮放超出最大值或最小值時,滾動視圖會臨時播放一個稍超出限制范圍的動畫再返回限制大小。若該屬性為NO,縮放會在達到限制大小時立即停止,默認為YES。
canCancelContentTouches
布爾值,控制觸摸內容視圖時是否總是導致跟蹤。
若該屬性的值為YES,內容中的視圖會開始跟蹤觸摸的手指,若用戶拖拽手指到足以滾動的距離,視圖會收到touchesCancelled:withEvent:信息,而滾動視圖會作為一個滾動事件處理這次觸摸。若該屬性的值為NO,滾動視圖在內容視圖開始跟蹤時將無視手指移動,不進行滾動。
contentInset
表示內容視圖從封閉滾動視圖中被嵌入的距離。
用該屬性增加圍繞內容的滾動區域。單位為點。默認值為UIEdgeInsetssZero。
contentOffset
表示從滾動視圖的原點到內容視圖的原點的偏移的點。
默認值為CGPointZero。
contentSize
內容視圖的大小。
單位是點。默認值是CGSizeZero。
decelerating
返回滾動視圖中的內容是否在提起手指后繼續移動。(只讀)
若用戶已不再拖拽內容但滾動還在發生時返回YES。
decelerationRate
浮點數,規定用戶提起手指后的滾動減速速率。
你的應用程序可以使用UIScrollViewDecelerationRateNormal和UIScrollViewDecelerationRateFast常量作為引用點以獲得一個合理的減速速率。
delaysContentTouches
布爾值,規定滾動視圖是否延遲處理觸摸下壓手勢。
若該屬性值為YES,滾動視圖會延遲處理下壓手勢直到可以確定該操作的意圖是否是滾動。若值為NO,滾動視圖會立即調用touchesShoudBegin:withEvent:inContentView:。默認值為YES。
具體討論詳見類討論。
delegate
滾動視圖對象的托管。
托管必須實現UIScrollViewDelegate協議。UIScrollView類(不保持托管),會調用托管實現中的每一個方法。
directionalLockEnabled
布爾值,規定是否滾動在某一方向上被禁止。
若該屬性為NO,滾動在水平和垂直方向上都被允許。若該屬性為YES,當用戶開始某一方向的滾動(水平或垂直),滾動視圖會禁止另一方向的滾動。若以對角線方向拖動,滾動則不會被鎖定且用戶在本次拖動完成之前可以在任意方向拖動。默認值為NO。
dragging
布爾值,表明用戶是否開始滾動內容。
該屬性持有的值可能需要滾動一段時間或距離才會被設定成YES。
indicatorStyle
滾動控制器的風格。
默認風格是UIScrollViewIndicatorStyleDefault。參見“Scroll Indicator Style”獲取更多關於此常量的描述。
maximumZoomScale
浮點數,指定可被應用滾動視圖內容的最大縮放因子。
該值規定了內容可被放大到多大。默認值為1.0。
minimumZoomScale
浮點數,指定可被應用滾動視圖內容的最小縮放因子。
該值規定了內容可被縮小到多小。默認值為1.0。
pagingEnabled
布爾值,規定滾動視圖是否可以翻頁。
若該值為YES,滾動視圖會在用戶滾動時停止在滾動視圖邊框的整數倍處。默認值為NO。
panGestureRecognizer
當前用於滑動手勢的手勢識別器(只讀)
在希望更加精確地控制被滾動視圖識別的滑動手勢時,你的應用程序可訪問此屬性。
pinchGestureRecognizer
當前用於擴張/收縮手勢的手勢識別器(只讀)
在希望更加精確地控制被滾動視圖識別的擴張/收縮手勢時,你的應用程序可訪問此屬性。
scrollEnabled
布爾值,規定是否允許滾動。
若該屬性的值為YES,允許滾動,若為NO,禁止滾動。默認值為YES。
當滾動被禁止時,滾動視圖將不再接受觸摸事件;滾動視圖會將事件傳送至響應鏈中。
scrollIndicatorInsets
表示滾動指示器從封閉滾動視圖中被嵌入的距離。
默認值為UIEdgeInsetssZero。
scrollToTop
布爾值,控制滾動至頂部的手指是否有效。
滾動至頂部手勢是觸摸狀態欄;當此屬性為YES時,滾動視圖在此手勢發生時跳轉至狀態欄。此屬性默認為YES。
該手勢作用於單個可見的滾動視圖;若有多個滾動視圖(例如,日期選擇器)設定了這個屬性,或者若托管在scrollViewShouldScrollToTop:中返回了NO,UIScrollView會無視滾動到頂部的請求。在滾動視圖滾動到內容視圖的頂部之后,它會給托管發送一個scrollViewDidScrollToTop:信息。
showsHorizontalScrollIndicator
布爾值,控制是否水平滾動指示器可見。
默認值為YES。指示器會在跟蹤時顯示並在跟蹤之后消失。
showsVerticalScrollIndicator
布爾值,控制是否垂直滾動指示器可見。
默認值為YES。指示器會在跟蹤時顯示並在跟蹤之后消失。
tracking
返回用戶是否觸摸內容並初始化滾動。(只讀)
若用戶已觸摸內容視圖但可以還示開始拖動時該屬性值為YES。
zoomBouncing
布爾值,表明縮放已超過了指定接收器的縮放限制。
若滾動視圖縮放超出最大值或最小值時該值為YES;否則值為NO。
zooming
布爾值,表明內容視圖當前是否在縮。
若用戶發出了一個縮放手指,該值為YES,否則為NO。
zoomScale
浮點數,指定當前應用於滾動視圖的內容的縮放因子。
該值規定了內容當前縮放了多少。默認值是1.0。
方法
flashScrollIndicators
短暫地顯示滾動指示器。
你應該在把滾動視圖放在最前端時調用此方法。
scrollRectToVisible:animated:
滾動內容的指定區域以便使內容在接受器中可見。
-(void)scrollRectToVisible:(CGRect)rectanimated:(BOOL)animated
參數:
rect
定義內容視圖區域的矩形。
animated
若滾動應被動畫化則傳入YES,否則為NO。
該方法滾動內容視圖以使rect中定義的區域可以剛好顯示在滾動視圖中。若區域已經是可見的,該方法什么也不做。
setContentOffset:animated:
設定內容視圖原點相對於接收器原點的偏移。
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
參數
contentOffset
內容視圖原點的偏移點(以點的形式表示)。
animated
若YES,用一個恆定的速度以動畫形式移動到新的偏移處;NO則立即移動。
setZoomScale:animated:
浮點數,指定當前縮放因子。
- (void)setZoomScale:(float)scale animated:(BOOL)animated
參數
scale
要縮放內容到的新值。
animated
若YES,動畫化縮放到時新的縮放大小,NO則立即縮放。
新的縮放值應在minnumZoomScale和maximumZoomScale之間。