UIScrollView 原理

scroll view 原理 事件

    在滾動過程中,實際上是在修改原點座標。當手指觸摸後, scroll view會暫時攔截觸摸事件,使用一個計時器。假如在計時器到點後沒有發生手指移動事件,那麼 scroll view 發送 tracking events 到被點擊的 subview。假如在計時器到點前發生了移動事件,那麼 scroll view 取消 tracking 本身發生滾動。 ci

    子類能夠重載 it

touchesShouldBegin:withEvent:inContentView: 決定本身是否接收 touch 事件
pagingEnabled:當值是 YES 會自動滾動到 subview 的邊界,默認是NO
touchesShouldCancelInContentView: 開始發送 tracking messages 消息給 subview 的時候調用這個方法,決定是否發送 tracking messages 消息到subview。假如返回 NO,發送。YES 則不發送。
假如 canCancelContentTouches屬性是NO,則不調用這個方法來影響如何處理滾動手勢。 io

    scroll view 還處理縮放和平移手勢,要實現縮放和平移,必須實現委託 viewForZoomingInScrollView:、scrollViewDidEndZooming:withView:atScale:
兩個方法。另外 maximumZoomScale和minimumZoomScale 兩個屬性要不同。 event

幾個屬性介紹 class

tracking
當 touch 後尚未拖動的時候值是YES,不然NO 原理

zoomBouncing
當內容放大到最大或者最小的時候值是 YES,不然 NO scroll

zooming
當正在縮放的時候值是 YES,不然 NO 方法

decelerating
當滾動後,手指放開可是還在繼續滾動中。這個時候是 YES,其它時候是 NO im

decelerationRate
設置手指放開後的減速率

maximumZoomScale
一個浮點數,表示能放最大的倍數

minimumZoomScale
一個浮點數,表示能縮最小的倍數

pagingEnabled
當值是 YES 會自動滾動到 subview 的邊界。默認是NO

scrollEnabled
決定是否能夠滾動

delaysContentTouches
是個布爾值,當值是 YES 的時候,用戶觸碰開始,scroll view要延遲一會,看看是否用戶有意圖滾動。假如滾動了,那麼捕捉 touch-down 事件,不然就不捕捉。假如值是NO,當用戶觸碰, scroll view 會當即觸發 touchesShouldBegin:withEvent:inContentView:,默認是 YES

canCancelContentTouches
當值是 YES 的時候,用戶觸碰後,而後在必定時間內沒有移動,scrollView 發送 tracking events,而後用戶移動手指足夠長度觸發滾動事件,這個時候,scrollView 發送了 touchesCancelled:withEvent: 到 subview,而後 scroView 開始滾動。假如值是 NO,scrollView 發送 tracking events 後,就算用戶移動手指,scrollView 也不會滾動。

contentSize
裏面內容的大小,也就是能夠滾動的大小,默認是0,沒有滾動效果。

showsHorizontalScrollIndicator
滾動時是否顯示水平滾動條

showsVerticalScrollIndicator
滾動時是否顯示垂直滾動條

bounces
默認是 yes,就是滾動超過邊界會反彈有反彈回來的效果。假如是 NO,那麼滾動到達邊界會馬上中止。

bouncesZoom
和 bounces 相似,區別在於:這個效果反映在縮放上面,假如縮放超過最大縮放,那麼會反彈效果;假如是 NO,則到達最大或者最小的時候當即中止。

directionalLockEnabled
默認是 NO,能夠在垂直和水平方向同時運動。當值是 YES 時,假如一開始是垂直或者是水平運動,那麼接下來會鎖定另一個方向的滾動。 假如一開始是對角方向滾動,則不會禁止某個方向

indicatorStyle
滾動條的樣式,基本只是設置顏色。總共3個顏色:默認、黑、白

scrollIndicatorInsets 設置滾動條的位置

相關文章
相關標籤/搜索