一、UIScrollView簡述:
作用:
UIScrollView可以讓一個大小超出展示范圍的UIView,通過手指的拖動,展示出這個UIView的其他部分,並且可以通過手勢,對UIView進行縮放
讀寫屬性
CGFloat screenW = [UIScreen mainScreen].bounds.size.width; CGFloat screenH = [UIScreen mainScreen].bounds.size.height; UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, screenW,screenH)]; //(CGSize類型):告訴UIScrollView所有內容的尺?寸,也就是告訴 它滾動的范圍(能滾多遠,滾到哪?裡是盡頭) scrollView.contentSize = CGSizeMake(screenW,screenH); //(CGPoint類型):用來表?示UIScrollView滾動的位置,(可以手動設置) scrollView.contentOffset = CGPointMake(100, 100); //(UIEdgeInsets類型) 這個屬性能夠在UIScrollView的4周增加額外的滾動區域 scrollView.contentInset = UIEdgeInsetsMake(0, 0, 20, 20); //(BOOL類型): 彈簧效果 scrollView.bounces = NO; //(BOOL類型): 是否可以滾動 scrollView.scrollEnabled = NO; //(BOOL類型): 橫向與縱向的滾動條是否顯示 scrollView.showsHorizontalScrollIndicator = NO; scrollView.showsVerticalScrollIndicator = NO;
其他屬性
scrollView.tracking;//當touch後還沒有拖動的時候,值是YES,否則NO; scrollView.zoomBouncing;//當內容放大到最大或者最小的時候,值是YES,否則NO scrollView.zooming;//當正在縮放的時候,值是YES,否則NO scrollView.decelerating;//當滾動後,手指放開,但是還在繼續滾動中,這個時候是 YES,其他是NO scrollView.decelerationRate;//設置手指放開後的減速率 scrollView.maximumZoomScale;//一個浮點數,表示能放最大的倍數 scrollView.minimumZoomScale;//一個浮點數,表示能縮最小的倍數 scrollView.pagingEnabled;//當值是YES,會自動滾動到subview的邊界,默認是NO scrollView.scrollEnabled;//決定是否可以滾動 scrollView.delaysContentTouches; //是個布爾值,當值是YES的時候,用戶觸碰開始,scroll view要延遲一會,看看是否用戶有意圖滾動,假如滾動了,那麼捕捉touch-down事件,否則就不捕捉, 假如值是NO,當用戶觸碰, scroll view會立即觸發touchesShouldBegin:withEvent:inContentView:, 默認是YES scrollView.canCancelContentTouches; //當值是YES的時候,用戶觸碰後,然後在一定時間內沒有移動,scrollView發送tracking events,然後用戶移動手指足夠長度觸發滾動事件,這個時候,scrollView發送了touchesCancelled:withEvent: 到subview,然後scroView開始滾動 //假如值是NO,scrollView發送tracking events後,就算用戶移動手指,scrollView也不會滾動 scrollView.contentSize;//裡面內容的大小,也就是可以滾動的大小,默認是0,沒有滾動效果。 scrollView.showsHorizontalScrollIndicator;//滾動時,是否顯示水平滾動條 scrollView.showsVerticalScrollIndicator;//滾動時,是否顯示垂直滾動條 scrollView.bounces;//默認是yes,就是滾動超過邊界,會反彈有反彈回來的效果,假如是 NO,那麼滾動到達邊界,那麼會連忙停止 scrollView.bouncesZoom;//和bounces類似,區別在於,這個效果反映在縮放上面,假如縮放超過最大縮放,那麼會反彈效果,假如是NO,則到達最大或者最小的時候,立即停止 scrollView.directionalLockEnabled; //默認是NO, 可以在垂直和水平方向同時運動, 當值是YES, 假如一開始是垂直或者是水平運動,那麼接下來會鎖定另外一個方向的滾動, 假如一開始是對角方向滾動,則不會禁止某個方向 scrollView.indicatorStyle; //滾動條的樣式,基本只是設置顏色,總共3個顏色,默認,黑色的,白色的 scrollView.scrollIndicatorInsets; //設置滾動條的位置
二、注意事項:
1.不能滾動:
1. contentSize 這個屬性,比uiscrollview的frame要小, 無需滾動, 自然就滾動不了。
2. scrollenabled 這個屬性,標識著是否允許滾動,要言設成yes
三、代理方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView; // any offset changes 只要scrollView的content 這個方法在任何方式觸發 contentOffset // 變化的時候都會被調用(包括用戶拖動,減速過程,直接通過代碼設置等),可以用於監控 contentOffset // 的變化,並根據當前的 contentOffset 對其他 view 做出隨動調整。 // called on start of dragging (may require some time and or distance to move) - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView; // 用戶開始拖動 scroll view 的時候被調用,可能需要一些時間和距離移動之後才會觸發。 // called on finger up if the user dragged. velocity is in points/millisecond. // targetContentOffset may be changed to adjust where the scroll view comes to rest - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0); // 在 didEndDragging 前被調用,當 willEndDragging 方法中 velocity 為 CGPointZero //(結束拖動時兩個方向都沒有速度)時,didEndDragging 中的 decelerate 為 NO,即沒有減速過程, //willBeginDecelerating 和 didEndDecelerating 也就不會被調用。反之, // 當 velocity 不為 CGPointZero 時,scroll view 會以 velocity 為初速度, // 減速直到 targetContentOffset。 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; // 在用戶結束拖動後被調用,decelerate 為 YES 時, // 結束拖動後會有減速過程。注,在 didEndDragging 之後,如果有減速過程, // scroll view 的 dragging 並不會立即置為 NO,而是要等到減速結束之後, // 所以這個 dragging 屬性的實際語義更接近 scrolling。 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; // 減速動畫開始前被調用。 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; // 減速動畫結束時被調用,這裡有一種特殊情況:當一次減速動畫尚未結束的時候再次 drag scroll view, // didEndDecelerating 不會被調用,並且這時 scroll view 的 dragging 和 decelerating 屬性都是 YES。 // 新的 dragging 如果有加速度,那麼 willBeginDecelerating 會再一次被調用,然後才是 didEndDecelerating; // 如果沒有加速度,雖然 willBeginDecelerating 不會被調用,但前一次留下的 didEndDecelerating 會被調用 - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; // called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating - (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2); // any zoom scale changes view縮放改變的時候調用。 - (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; // return a view that will be scaled. if delegate returns nil, nothing happens 告訴代理要縮放那個控件。 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view NS_AVAILABLE_IOS(3_2); // called before the scroll view begins zooming its content縮放開始的時候調用 - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view atScale:(CGFloat)scale; // scale between minimum and maximum. called after any 'bounce' animations縮放完畢的時候調用。 - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView; // return a yes if you want to scroll to the top. if not defined, assumes YES- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView; // called when scrolling animation finished. may be called immediately if already at top滾動動畫完成時調用。