1、簡單介紹UIScrollView
移動設備的屏幕大小是有限的,因此直接展示在用戶眼前的內(nèi)容也相當有限。當展示的內(nèi)容較多,超出一個屏幕時,用戶可通過滾動手勢來查看屏幕以外的內(nèi)容,普通的UIView不具備滾動功能,不能顯示過多的內(nèi)容。
UIScrollView是一個能夠滾動的視圖控件,可以用來展示大量的內(nèi)容,并且可以通過滾動查看所有的內(nèi)容。
2、UIScrollView常用屬性和方法
內(nèi)容視圖相關
@property(nonatomic) CGSize contentSize; //這個屬性用來表示UIScrollView內(nèi)容的尺寸,滾動范圍
@property(nonatomic) CGPoint contentOffset; //內(nèi)容偏移量,表示UIScrollView滾動到的位置
@property(nonatomic) UIEdgeInsets contentInset; //內(nèi)邊距
// 設置內(nèi)容視圖的原點相對于scrollView的原點的偏移量
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
滑動相關
@property(nonatomic,getter=isDirectionalLockEnabled) BOOL directionalLockEnabled; //是否只允許同時滑動一個方向
@property(nonatomic,getter=isPagingEnabled) BOOL pagingEnabled; //是否分頁
@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled; //是否能滾動
@property(nonatomic) BOOL scrollsToTop;//是否允許點擊狀態(tài)欄讓距離狀態(tài)欄最近的scrollView滑動到頂部,默認為YES
@property(nonatomic) BOOL bounces; //是否有觸底反彈效果,默認為YES
@property(nonatomic) BOOL alwaysBounceVertical;
@property(nonatomic) BOOL alwaysBounceHorizontal;
@property(nonatomic) CGFloat decelerationRate; //設置減速率
// 將指定區(qū)域滑動到剛好可見處(即距離邊緣最近處)
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;
@property(nonatomic,readonly,getter=isTracking) BOOL tracking; //點擊中
@property(nonatomic,readonly,getter=isDragging) BOOL dragging; //拖拽中
@property(nonatomic,readonly,getter=isDecelerating) BOOL decelerating; //減速滾動中
@property(nonatomic) BOOL delaysContentTouches; // 是否延遲事件傳遞,默認為YES
@property(nonatomic) BOOL canCancelContentTouches;// 是否可以取消內(nèi)容視圖被觸摸,默認為YES
指示器相關
@property(nonatomic) BOOL showsHorizontalScrollIndicator; // 是否顯示水平滾動條
@property(nonatomic) BOOL showsVerticalScrollIndicator; // 是否顯示垂直滾動條
@property(nonatomic) UIEdgeInsets scrollIndicatorInsets; //為指示器周圍增加可滾動區(qū)域
@property(nonatomic) UIScrollViewIndicatorStyle indicatorStyle; //指示器樣式
// 閃一下指示器
- (void)flashScrollIndicators;
縮放相關
@property(nonatomic) CGFloat minimumZoomScale; // 能縮最小的倍數(shù)
@property(nonatomic) CGFloat maximumZoomScale; // 能放最大的倍數(shù)
@property(nonatomic) CGFloat zoomScale; //縮放比例
@property(nonatomic,readonly,getter=isZooming) BOOL zooming; // 縮放中
@property(nonatomic,readonly,getter=isZoomBouncing) BOOL zoomBouncing; // 是否允許觸底反彈,默認為YES
// 設置縮放比例
- (void)setZoomScale:(CGFloat)scale animated:(BOOL)animated;
// 縮放到指定區(qū)域
- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated;
鍵盤相關
@property(nonatomic) UIScrollViewKeyboardDismissMode keyboardDismissMode; //隱藏鍵盤模式
/*
UIScrollViewKeyboardDismissModeNone, //不隱藏鍵盤
UIScrollViewKeyboardDismissModeOnDrag, //當拖拽scrollView時隱藏鍵盤
UIScrollViewKeyboardDismissModeInteractive, //當拖拽鍵盤上方時隱藏鍵盤
*/
3、UIScrollView代理
滑動相關代理
// 當scrollView的contentOffset發(fā)生變化時調(diào)用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
// 將要開始拖拽時調(diào)用(注: 該方法可能需要先滑動一段時間或距離才會被調(diào)用)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
// 當用戶停止拖拽時調(diào)用(注: 應用程序可以通過修改targetContentOffset參數(shù)的值來調(diào)整內(nèi)容視圖content view停止的位置)
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset;
// 當用戶停止拖拽時調(diào)用(注: 如果內(nèi)容視圖content view在停止拖拽后繼續(xù)移動,則decelerate參數(shù)為YES)
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
// 將要開始減速時調(diào)用(僅當停止拖拽后繼續(xù)移動時才會被調(diào)用)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
// 已經(jīng)結束減速時調(diào)用(僅當停止拖拽后繼續(xù)移動時才會被調(diào)用)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
// 返回是否允許點擊狀態(tài)欄讓scrollView滑動到頂部,如果未實現(xiàn)該方法,則默認為YES(僅當scrollsToTop屬性為YES時才調(diào)用)
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;
// 當scrollView已經(jīng)滑動到頂部時調(diào)用(僅當點擊狀態(tài)欄讓scrollView滑動到頂部才調(diào)用)
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;
// 當-setContentOffset:animated:/-scrollRectVisible:animated:方法動畫結束時調(diào)用(僅當animated設置為YES時才調(diào)用)
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
縮放相關代理
// 當縮放比例更改時調(diào)用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView;
// 參與縮放的子視圖
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
// 將要開始縮放時調(diào)用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view;
// 已經(jīng)結束縮放時調(diào)用
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale;