跟著蘋果API & YYKit學(xué)習(xí)UIScrollView

作者兩年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)的效果。附一張圖方便理解:


scrollView.png

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+偏移量)的位置上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容