scroll view 原理

ScrollView原理
      視圖的滾動過程,其實是在不斷修改原點座標。當手指觸摸後,ScrollView會暫時攔截觸摸事件,使用一個計時器。假如在計時器到點後沒有發生手指移動事件,那麼ScrollView發送tracking events到被點擊的subView;若是在計時器到點後發生了移動事件,那麼ScrollView取消tracking自己促發滾動。

其子類可以重載
touchesShouldBegin: withEvent: inContentView: 決定自己是否接收touch事件。

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

touchesShouldCancelInContentView: 開始發送tracking messages消息給subView的時候會調用這個方法。以決定是否發送tracking messages消息到subView。假如返回NO,發送。YES則不發送。若是canCancelContentTouches屬性是NO,則不調用這個方法來影響如何處理滾動手勢。

      ScrollView還可處理縮放和平移手勢,要實現這必須實現委託viewForZoomingInScrollView:scrollViewDidEndZooming: withView: atScale:兩個方法。另外maximumZoomScale和minimumZoomScale兩個屬性要不一樣。

常用屬性介紹
maximumZoomScale 能放大的最大倍數,是浮點數。

minimumZoomScale  能縮小的最小倍數,是浮點數。

pagingEnabled 是否自動滾動到subView邊界

scrollEnabled 是否可以滾動

contentSize 裏面內容的大小,即可以滾動的大小,默認是0,沒有滾動效果

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

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

bounces 默認是YES,就是滾動超過邊界會反彈,即有反彈回來的效果。若是NO,則滾動到達邊界會立刻停止

bouncesZoom 與bounces類似,只是反映在縮放效果上。

directionalLockEnabled 默認是NO,可以在垂直和水平方向同時運動。當值是YES時,視哪個方向開始則鎖定另外一個方向的滾動。

indicatorStyle 滾動條的樣式。總共3色:默認、黑、白

scrollIndicatorInsets 設置滾動條位置

tracking  當touch後還沒有拖動的時候是YES,否則NO

zoomBouncing 當內容放大到最大或者最小的時候值是YES,否則NO

zooming 當正在縮放的時候值是YES,否則NO

decelerating 當滾動後,手指放開但還在繼續滾動中。此時是YES,其它時候都是NO

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

基本使用方法:
初始化:一般的控件初始化都是可以用alloc和init來初始化的。
        UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0,0.0,self.view.frame.size.width, 400)];

 關於控件添加與初始化,建議都採用代碼調用合適的初始化方法來操作,雖然IB佈局能夠節省時間,但不能哪過很好了解整個代碼執行流程。

委託方法:UIScrollView也要指定委託對象,該委託對象的控制器同樣也要遵循UIScrollViewDelegate協議,實現其相應的代理方法。

  • scrollViewDidScroll:
  • scrollViewWillBeginDragging:
  • scrollViewDidEndDragging:
  • scrollViewDidEndDecelerating:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章