作者兩年iOS開發(fā)經(jīng)驗(yàn),通過閱讀蘋果api重溫各個(gè)知識(shí)點(diǎn),如果你喜歡這個(gè)系列,請關(guān)注我。有任何建議請留言。轉(zhuǎn)載請注明來源。
本來這個(gè)系列只是單純的蘋果api學(xué)習(xí)筆記,后來想學(xué)習(xí)一下YYKit的源碼,所以在文章中一并加入
作者:Roger
Managing the Display of Content
-
contentOffset
-
contentSize
-
contentInset
ScorllView最基本的三個(gè)屬性:contentOffset表示ScorllView所展示區(qū)域左上角的坐標(biāo),contentSize表示ScrollView實(shí)際的尺寸,contentInset表示邊界的偏移量。這三個(gè)概念需要自己多理解,包括字面意思和呈現(xiàn)的效果。附一張圖方便理解:

Managing Scrolling
-
scrollEnabled
判斷ScrollView是否可以滑動(dòng)
-
directionalLockEnabled
如果為NO,ScrollView可以隨意的橫向或縱向滑動(dòng)。如果為YES,那么在一次滑動(dòng)動(dòng)作完成之前(即用戶拖動(dòng)完成并將手指從屏幕上舉起),ScrollView只能響應(yīng)其第一個(gè)接收到的滑動(dòng)響應(yīng)。即如果用戶首先拖動(dòng)ScrollView橫向滑動(dòng),如果用戶沒有提起手指,那么用戶無法再縱向拖動(dòng)ScrollView,反之亦然。如果用戶是斜線拖動(dòng),那么用戶可以在一次滑動(dòng)動(dòng)作完成之前隨意橫行或縱向滑動(dòng)。
-
scrollsToTop
如果為YES,用戶點(diǎn)擊狀態(tài)欄時(shí),ScrollView會(huì)自動(dòng)滑動(dòng)到頂部,如果為NO,
scrollViewShouldScrollToTop:方法返回NO,另一種返回NO的情況是ScrollView已經(jīng)在頂部了。當(dāng)滑動(dòng)結(jié)束時(shí)會(huì)觸發(fā)代理方法scrollViewDidScrollToTop:。此屬性默認(rèn)為YES。在iphone上如果屏幕上有多個(gè)ScrollView且scrollsToTop為YES,那么點(diǎn)擊狀態(tài)欄時(shí)無法觸發(fā)滑動(dòng)至頂?shù)膭?dòng)作。 -
scrollRectToVisible:animated:
定義一個(gè)矩形(包括大小和左上角位置),將ScrollView滑動(dòng)到能展示這個(gè)矩形的區(qū)域內(nèi)。如果這個(gè)矩形已經(jīng)在ScrollView上展示出來,那么這個(gè)方法不做任何操作。
-
pagingEnabled
判斷ScrollView是否分頁滑動(dòng)
-
bounces
判斷ScrollView滑動(dòng)到邊緣時(shí),是否有回彈的效果。
-
alwaysBounceHorizontal && alwaysBounceVertical
如果bounces為YES,且這個(gè)屬性也是YES,那么即使contentSize小于或等于sontentOffset,ScrollView滑動(dòng)到邊緣時(shí),也會(huì)有回彈的效果。
-
touchesShouldBegin:withEvent:inContentView:
如果想要將ScrollView的手勢下傳到ContentView,則返回YES
- (BOOL)touchesShouldBegin:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view{
NSLog(@"secondView touchesShouldBegin");
if ([view isKindOfClass:[UIButton class]]) {
return YES;
}
return NO;
}
-
touchesShouldCancelIncontentView:
填坑中...
-
canCancelContentTouches
填坑中...
-
delaysContentTouches
填坑中...
-
decelerationRate
用戶滑動(dòng)到邊界松手時(shí),回彈的速度。范圍在0.0到1.0之間。
-
draging
判斷用戶是否正在滑動(dòng)ScrollView(只讀)。
-
tracking
判斷用戶是否已經(jīng)觸碰在ScrollView上準(zhǔn)備滑動(dòng)(未滑動(dòng))(只讀)。
-
decelerating
判斷用戶滑動(dòng)ScrollView且舉起手指后,ScrollView是否正在滑動(dòng)中。
Managing the Scroll Indicator
-
indicatorStyle
枚舉,設(shè)置滑動(dòng)條樣式
-
scrollIndicatorInsets
設(shè)置滑動(dòng)條的偏移量
-
showHorizontalScrollIndicator && showVerticalScrollIndicator
展示橫向/縱向的滑動(dòng)條
-
- flashScrollIndicators
閃一下滾動(dòng)條,暗示是否有可滾動(dòng)的內(nèi)容??梢栽赩iewDidAppear或[table reload]之后調(diào)用。
Zooming and Panning
-
panGestureRecognizer && pinchGestureRecognizer
填坑中...
-
zoomToRect:animated:
將內(nèi)容視圖縮放到指定的Rect中。
-
zoomScale
ScrollView的縮放比例,默認(rèn)值為1.0。
-
setZoomScale:animated:
設(shè)置程序縮放比例。
-
maximumZoomScale
最大放大比例,默認(rèn)值為1.0,不得小于minimumZoomScale。
-
minimumZoomScale
最小放大比例,默認(rèn)值為1,不得大于maxmumZoomScale。
-
zoomBouncing
只讀,當(dāng)縮放超過最大或者最小范圍的時(shí)候,回彈到最大最小范圍的過程中,該值返回YES。
-
zooming
只讀,判斷用戶是否正在進(jìn)行縮放手勢。
-
bouncesZoom:
描述在縮放超過縮放比例時(shí),是否有bounce(回彈效果),默認(rèn)值為YES。如果值為NO,則達(dá)到最大或最小縮放比例時(shí)會(huì)立即停止縮放。否則,產(chǎn)生回彈效果。
Managing the Keyboard
-
keyboardDismissMode
iOS 7.0新屬性,枚舉,設(shè)置ScrollView鍵盤收起的方式
- UIScrollViewKeyboardDismissModeNone,
- UIScrollViewKeyboardDismissModeOnDrag,
- UIScrollViewKeyboardDismissModeInteractive
OnDrag表示ScrollView滑動(dòng)的時(shí)候收起鍵盤,Interactive表示隨著ScollView的滑出一同收起鍵盤(實(shí)際操作觸發(fā)條件是下拉ScrollView至頂部出發(fā)回彈效果時(shí),回收鍵盤)。
Constants
-
UIScrollViewIndicatorStyle
枚舉,通過設(shè)置indicatorStyle,設(shè)置滑動(dòng)條的風(fēng)格
- UIScrollViewIndicatorStyleDefault,
- UIScrollViewIndicatorStyleBlack,
- UIScrollViewIndicatorStyleWhite
-
Deceleration Constants
枚舉常量,通過屬性decelerationRate設(shè)置回彈效果的回彈速度
_scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
- UIScrollViewDecelerationRateNormal,
- UIScrollViewDecelerationRateFast
YYKit For UIScrollView
在UITableview中,有滑動(dòng)到頂部的方法。在YYKit中,也給ScrollView添加了滑動(dòng)到頂,底,左,右部的方法。
我們拿滑動(dòng)到頂部的方法舉例:
- (void)scrollToTop {
[self scrollToTopAnimated:YES];
}
- (void)scrollToTopAnimated:(BOOL)animated {
CGPoint off = self.contentOffset;
off.y = 0 - self.contentInset.top;
[self setContentOffset:off animated:animated];
}
其實(shí)實(shí)現(xiàn)方法很簡單,就是將ScrollView的左上角坐標(biāo)移動(dòng)到ScrollView在頂部的(0+偏移量)的位置上。