一、枚舉值
- UIScrollViewIndicatorStyle 滾動條風格
typedef NS_ENUM(NSInteger, UIScrollViewIndicatorStyle) {
UIScrollViewIndicatorStyleDefault, // 黑色滾動條白色邊界
UIScrollViewIndicatorStyleBlack, // 黑色
UIScrollViewIndicatorStyleWhite // 白色
};
- UIScrollViewKeyboardDismissMode 鍵盤隱藏模式
typedef NS_ENUM(NSInteger, UIScrollViewKeyboardDismissMode) {
UIScrollViewKeyboardDismissModeNone, // 無
UIScrollViewKeyboardDismissModeOnDrag, // drag 時隱藏
UIScrollViewKeyboardDismissModeInteractive, // 鍵盤跟隨拖放觸控屏幕,并可再次向上拉以取消取消
} NS_ENUM_AVAILABLE_IOS(7_0);
- UIScrollViewIndexDisplayMode
typedef NS_ENUM(NSInteger, UIScrollViewIndexDisplayMode) {
UIScrollViewIndexDisplayModeAutomatic, // 索引將根據(jù)需要自動顯示或隱藏
UIScrollViewIndexDisplayModeAlwaysHidden, // 索引將永遠不會顯示
} API_AVAILABLE(tvos(10.2));
- UIScrollViewContentInsetAdjustmentBehavior
typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) {
UIScrollViewContentInsetAdjustmentAutomatic, // 與.scrollableAxes類似,但為了向后兼容,當滾動視圖由視圖控制器擁有時,無論滾動視圖是否可滾動,都會自動調整上下內(nèi)容集
UIScrollViewContentInsetAdjustmentScrollableAxes, // 調整可滾動軸的邊緣(即, contentSize.width/height > frame.size.width/height 或 alwaysBounceHorizontal/Vertical = YES)
UIScrollViewContentInsetAdjustmentNever, // 未調整contentInset
UIScrollViewContentInsetAdjustmentAlways, // contentInset總是由滾動視圖的safeareainset來調整
} API_AVAILABLE(ios(11.0),tvos(11.0));
二、屬性
// scrollerView 的偏移量 默認為CGPointZero
@property(nonatomic) CGPoint contentOffset;
// scrollerView 的內(nèi)容視圖大小 默認為CGSizeZero
@property(nonatomic) CGSize contentSize;
// 在UIScrollView的四周增加額外的滾動區(qū)域 默認為UIEdgeInsetsZero
@property(nonatomic) UIEdgeInsets contentInset;

1953382-c07ac3c52e80af42.png
@property(nonatomic, readonly) UIEdgeInsets adjustedContentInset API_AVAILABLE(ios(11.0),tvos(11.0));
@property(nonatomic) UIScrollViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior API_AVAILABLE(ios(11.0),tvos(11.0));
@property(nonatomic,readonly,strong) UILayoutGuide *contentLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0));
@property(nonatomic,readonly,strong) UILayoutGuide *frameLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0));
// 滑動式圖代理,默認為nil
@property(nullable,nonatomic,weak) id<UIScrollViewDelegate> delegate;
// 指定控件是否只能在一個方向上滾動
@property(nonatomic,getter=isDirectionalLockEnabled) BOOL directionalLockEnabled;
// 控制控件遇到邊框是否反彈
@property(nonatomic) BOOL bounces;
// 默認為NO 控制垂直方向遇到邊框是否反彈,如果為YES并且bounces是YES,即使內(nèi)容小于界限,也允許垂直拖動
@property(nonatomic) BOOL alwaysBounceVertical;
// 默認為NO 控制水平方向遇到邊框是否反彈,如果為YES并且bounces是YES,即使內(nèi)容小于界限,也允許水平拖動
@property(nonatomic) BOOL alwaysBounceHorizontal;
// 控制控件是否整頁翻動
@property(nonatomic,getter=isPagingEnabled) BOOL pagingEnabled __TVOS_PROHIBITED;
// 控制控件是否能滾動
@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
// 是否顯示水平滾動條(滑動時顯示滾動條滑動結束后消失),默認為YES
@property(nonatomic) BOOL showsHorizontalScrollIndicator;
// 是否顯示垂直滾動條(滑動時顯示滾動條滑動結束后消失),默認為YES
@property(nonatomic) BOOL showsVerticalScrollIndicator;
// 表示滾動指示器從封閉滾動視圖中被嵌入的距離 ,默認為UIEdgeInsetsZero
@property(nonatomic) UIEdgeInsets scrollIndicatorInsets;
// 滾動條樣式 默認為UIScrollViewIndicatorStyleDefault
@property(nonatomic) UIScrollViewIndicatorStyle indicatorStyle;
// 浮點數(shù),規(guī)定用戶提起手指后的滾動減速速率。
@property(nonatomic) UIScrollViewDecelerationRate decelerationRate NS_AVAILABLE_IOS(3_0);
// 索引展示類型 自動或者總是隱藏
@property(nonatomic) UIScrollViewIndexDisplayMode indexDisplayMode API_AVAILABLE(tvos(10.2));
三、方法
// 短暫地顯示滾動指示器。
- (void)flashScrollIndicators;
// 滾動內(nèi)容的指定區(qū)域以便使內(nèi)容在接受器中可見。
// 參數(shù): rect 定義內(nèi)容視圖區(qū)域的矩形。 animated 若滾動應被動畫化則傳入YES,否則為NO。
// 該方法滾動內(nèi)容視圖以使rect中定義的區(qū)域可以剛好顯示在滾動視圖中。若區(qū)域已經(jīng)是可見的,該方法什么也不做。
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;
// 設定內(nèi)容視圖原點相對于接收器原點的偏移。
// 參數(shù) : contentOffset 內(nèi)容視圖原點的偏移點(以點的形式表示)。animated 若YES,用一個恒定的速度以動畫形式移動到新的偏移處;NO則立即移動。
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
// 浮點數(shù),指定當前縮放因子。
// 參數(shù): scale 要縮放內(nèi)容到的新值。animated 若YES,動畫化縮放到時新的縮放大小,NO則立即縮放。
// 新的縮放值應在minnumZoomScale和maximumZoomScale之間。
- (void)setZoomScale:(float)scale animated:(BOOL)animated
四、代理
- 滾動有關代理
// 滾動就會觸發(fā)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{ NSLog(@"只有scrollview是跟滾動狀態(tài)就會調用此方法");
}
//開始拖拽時觸發(fā)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@"開始拖拽");
}
// 結束拖拽時觸發(fā)
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"結束拖拽");
}
// 開始減速時觸發(fā)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
NSLog(@"開始減速");
}
// 結束減速時觸發(fā)(停止)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSLog(@"結束減速(停止)");
}
- 縮放有關代理
//指定scrollview的某一個子視圖為可縮放視圖,前提條件是次視圖已經(jīng)添加到scrollview上面
-(UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{
UIView *imageView = (UIView*)[scrollView viewWithTag:1000];
return imageView;
}
// 開始縮放的代理方法 第二個參數(shù)view:這個參數(shù)使我們將要縮放的視圖(這里就是imageView)
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
NSLog(@"%@",view);
}
// 正在縮放的代理方法 只要在縮放就執(zhí)行該方法,所以此方法會在縮放過程中多次調用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
// 在縮放過程中為了使得該視圖一直在屏幕中間,所以我們需要在他縮放的過程中一直調整他的center
// 得到scrollview的子視圖
UIImageView *imageView = (UIImageView *)[scrollView viewWithTag:1000];
// 打印imageView的frame,分析為什么他的位置會改變
// NSLog(@"frame -- %@",NSStringFromCGRect(imageView.frame));
// 設置imageview的center,是他的位置一直在屏幕中央
imageView.center = scrollView.center;
// 打印contentSize 分析為什么縮放之后會滑動
NSLog(@"contentSize %@",NSStringFromCGSize(scrollView.contentSize));
}
// 縮放結束所執(zhí)行的代理方法
/**
* @ view 當前正在縮放的視圖
* @ scale 當前正在縮放視圖的縮放比例
*/
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
// 縮放完成之后恢復原大小,這里運用到2D仿射變換函數(shù)中與捏合有關的函數(shù)
view.transform =CGAffineTransformMakeScale(1, 1);
}