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