標籤:
http://blog.sina.com.cn/s/blog_45e2b66c01019wfg.html
UIScrollView 快速滑動過程中,捲動速度過快,可以通過屬性decelerationRate控制。
decelerationRate範圍為0-----1,一般0---0.5沒有多少區別。0也沒有問題。
| decelerationrate 設定當它減速時的速度,0.1f的話,很快就停下來,1就正常速度停下,即滑動一定距離才停. |
下面附屬UIScrollView屬性:轉自 http://blog.csdn.net/aaajj/article/details/6872038 在滾動過程當中,其實是在修改原點座標
當手指觸摸後, scroll view會暫時攔截觸摸事件,使用一個計時器,假如在計時器到點後,沒有發生手指移動事件,那麼,scroll view發送tracking events到被點擊的subview
假如在計時器到點前,發生了移動事件,那麼 scroll view 取消tracking自己發生滾動
子類可以重載touchesShouldBegin:withEvent:inContentView: 決定自己是否接收touch事件
pagingEnabled當值是YES,會自動滾動到subview的邊界,預設是NO
touchesShouldCancelInContentView: 開始發送tracking messages訊息給subview的時候
調用這個方法,決定是否發送tracking messages訊息到subview,假如返回NO,發送,YES則不發送
假如 canCancelContentTouches屬性是NO,則不調用這個方法
來影響如何處理滾動手勢
scroll view還處理縮放和平移手勢
要實現縮放和平移,必須實現委託viewForZoomingInScrollView:
scrollViewDidEndZooming:withView:atScale:
兩個方法,另外 maximumZoomScale和minimumZoomScale兩個屬性要不一樣
幾個屬性
tracking 當touch後還沒有拖動的時候,值是YES,否則NO
zoomBouncing 當內容放大到最大或者最小的時候,值是YES,否則NO
zooming 當正在縮放的時候,值是YES,否則NO
decelerating 當滾動後,手指放開,但是還在繼續滾動中,這個時候是 YES,其他是NO
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 設定捲軸的位置 http://blog.csdn.net/diyagoanyhacker/article/details/6062498 / *******************************/
UIScrollView的屬性總結
| 屬性 |
作用 |
| 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------------------------------- |
控制控制項滾動到頂部
|
|
這裡把UIScrollView的幾個要點總結下:
從你的手指touch螢幕開始,scrollView開始一個timer,如果:
1. 150ms內如果你的手指沒有任何動作,訊息就會傳給subView。
2. 150ms內手指有明顯的滑動(一個swipe動作),scrollView就會滾動,訊息不會傳給subView,這裡就是產生問題二的原因。
3. 150ms內手指沒有滑動,scrollView將訊息傳給subView,但是之後手指開始滑動,scrollView傳送touchesCancelled訊息給subView,然後開始滾動。
觀察下tableView的情況,你先按住一個cell,cell開始高亮,手不要放開,開始滑動,tableView開始滾動,高亮取消。
delaysContentTouches的作用:
這個標誌預設是YES,使用上面的150ms的timer,如果設定為NO,touch事件立即傳遞給subView,不會有150ms的等待。
cancelsTouches的作用:
這個標準預設為YES,如果設定為NO,這訊息一旦傳遞給subView,這scroll事件不會再發生。
UIScrollViewDelegate 協議
//scrollView滾動時,就調用該方法。任何offset值改變都調用該方法。即滾動過程中,調用多次
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
// 從中可以讀取contentOffset屬性以確定其滾動到的位置。
// 注意:當ContentSize屬性小於Frame時,將不會出發滾動
}
// 當開始滾動視圖時,執行該方法。一次有效滑動(開始滑動,滑動一小段距離,只要手指不鬆開,只算一次滑動),只執行一次。
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{}
// 滑動scrollView,並且手指離開時執行。一次有效滑動,只執行一次。
// 當pagingEnabled屬性為YES時,不調用,該方法
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{}
// 滑動視圖,當手指離開螢幕那一霎那,調用該方法。一次有效滑動,只執行一次。
// decelerate,指代,當我們手指離開那一瞬後,視圖是否還將繼續向前滾動(一段距離),經過測試,decelerate=YES
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{}
// 滑動減速時調用該方法。
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{}
// 滾動視圖減速完成,滾動將停止時,調用該方法。一次有效滑動,只執行一次。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{}
// 當滾動視圖動畫完成後,調用該方法,如果沒有動畫,那麼該方法將不被調用
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{}
// 返回將要縮放的UIView對象。要執行多次
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{}
// 當scrollView縮放時,調用該方法。在縮放過程中,回多次調用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{}
// 當將要開始縮放時,執行該方法。一次有效縮放,就只執行一次。
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{}
// 當縮放結束後,並且縮放大小回到minimumZoomScale與maximumZoomScale之間後(我們也許會超出縮放範圍),調用該方法。
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{}
// 指示當使用者點擊狀態列後,滾動視圖是否能夠滾動到頂部。需要設定滾動視圖的屬性:_scrollView.scrollsToTop=YES;
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{}
// 當滾動視圖滾動到最頂端後,執行該方法
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{
}
本文出自 “聖殿騎士團的iOS” 部落格,請務必保留此出處http://10646127.blog.51cto.com/10636127/1690221
轉載--iOS,UIScrollView的相關屬性,方法