日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOSday05 UIScrollView使用

發(fā)布時間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOSday05 UIScrollView使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

UIScrollView使用的步驟

  • 1.創(chuàng)建UIScrollView
    • 2.將需要展示的內(nèi)容添加到UIScrollView中
    • 3.設(shè)置UIScrollView的滾動范圍 (contentSize)
    • 4.添加兩個子控件到UIScrollView中
    • 5.一個控件沒有設(shè)置frame, 默認(rèn)x/y就是0

scrollView不能滾動的幾種情況

1.沒有設(shè)置contentSize2.scrollEnabled屬性 = NO3.userInteractionEnabled屬性 = NO

enabled和userInteractionEnabled的區(qū)別

1. enabled: 代表控件不可用2. userInteractionEnabled: 代表控件不可以和用戶交互, 也就是不能響應(yīng)用戶的操作

如何去掉滾動條

  • self.scrollView.showsHorizontalScrollIndicator = NO;
  • self.scrollView.showsVerticalScrollIndicator = NO;
  • 滾動條也是scrollView的子控件的一部分
  • 滾動條可能在子控件的前面, 也可能在子控件的后面
  • 正是因為這個原因, 所以以后在開發(fā)中不推薦大家通過subviews獲取子控件的方式來操作子控件
  • [self.scrollView.subviews lastObject];


    設(shè)置滾動條的樣式

    self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;

  • 默認(rèn)情況下UIScrollView有一個回彈效果,只要設(shè)置了contentSize就有回彈效果
  • self.scrollView.bounces = YES;

  • 設(shè)置默認(rèn)是否有回彈效果 (默認(rèn)就是沒有設(shè)置contentSize的情況)
    垂直方向可以回彈
  • 下拉刷新
  • self.scrollView.alwaysBounceVertical = YES;

  • 哪怕沒有設(shè)置contentSize也可以有回彈效果
  • self.scrollView.alwaysBounceHorizontal = YES;


    設(shè)置內(nèi)容偏移位(contentOffset)

  • 其實就是設(shè)置scrollView滾動到什么地方
  • 告訴scrollView x方向要移動多少, y方向要移動多少
  • 如果x是正數(shù): 圖片往左邊移動
  • 如果x是負(fù)數(shù): 圖片往右邊移動
  • 同理y是正數(shù): 圖片往上移動
  • 同理y是負(fù)數(shù): 圖片往下移動
    7. 計算公式: 永遠(yuǎn)都是以 控件的左上角 – 內(nèi)容的左上角
  • sc.contentOffset = CGPointMake(100, 0);

    8. 注意點:contentOffset移動的位置是一個臨時的位置, 只要輕輕拖拽一下就會回到默認(rèn)的位置

    2.設(shè)置滾動范圍

    self.sc.contentSize = CGSizeMake(IMAGE_COUNT * width, height);

    self.sc.contentSize = CGSizeMake(width, IMAGE_COUNT * height);

    self.sc.bounces = NO;

    self.sc.pagingEnabled = YES;

    pagingEnabled實現(xiàn)分頁的本質(zhì), 是按照UIScrollView的寬度或者高度來分頁的
    UIScrollView的寬度就是一頁的寬度


    UIScrollViewDelegate

    • 如何監(jiān)聽一個控件的變化/狀態(tài)
      • 1.首先需要查看該控件的頭文件, 看它繼承于誰
      • 1.1如果繼承于UIControl, 那么就可以通過addTarget來監(jiān)聽
      • 1.2如果繼承于UIView, 那么必須通過代理來監(jiān)聽
    • 代理協(xié)議的規(guī)律:
      • 以控件的類名開頭, 后面加上delegate
      • 代理協(xié)議中的方法名的規(guī)律:
      • 一般以控件名稱去掉類前綴開頭
      • 代理協(xié)議中的方法參數(shù)的規(guī)律:
      • 誰觸發(fā)事件, 就將誰傳遞進(jìn)來
    • 如何監(jiān)聽UIScrollView的變化
      • 1.成為UIScrollView的代理
      • 2.遵守UIScrollView的協(xié)議
      • 3.實現(xiàn)UIScrollView協(xié)議中的方法

        代理作用:

      • 當(dāng)A對象想監(jiān)聽B對象的變化 , 那么可以讓A成為B的代理
      • 當(dāng)B對象發(fā)生一些變化想通知A對象, 那么可以讓A成為B的代理
        self.sc.delegate = self;

      • 只要成為了UIScrollView的代理, 遵守代理協(xié)議, 實現(xiàn)協(xié)議中的方法
        當(dāng)UIScrollView發(fā)生一些變化的時候, 系統(tǒng)就會自動調(diào)用這些代理方法

      - scrollViewDidScroll方法什么時候調(diào)用?
      - 只要UIScrollView滾動了, 系統(tǒng)就會自動調(diào)用

      - scrollViewWillBeginDragging
      • 只要用戶準(zhǔn)備開始拖拽了就會調(diào)用

    - (void)scrollViewDidEndDragging:(nonnull UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

    • 每次調(diào)用 停止拖拽方法時 ,系統(tǒng)都會傳入一個當(dāng)前是否有慣性的參數(shù)
      我們可以判斷該參數(shù)是否為YES, 如果是YES代表當(dāng)前UIScrollView有慣性, 停止拖拽并不會停止?jié)L動, 需要在停止減速方法中監(jiān)聽什么時候真正的停止

    UIScrollView已經(jīng)停止減速了

    • 只有執(zhí)行了這個方法才代表UIScrollView已經(jīng)停止?jié)L動了

    - (void)scrollViewDidEndDecelerating:(nonnull UIScrollView *)scrollView

    注意:

    • 如果想在UIScrollView停止?jié)L動之后做一些操作, 有兩種情況
      • 1.沒有慣性的情況: 只會調(diào)用 停止拖拽的方法, 不會調(diào)用停止減速的方法
      • 2.有慣性的情況: 既會調(diào)用 停止拖拽的方法, 也會調(diào)用停止減速的方法
        • 所以: 以后要判斷UIScrollView是否停止?jié)L動, 需要同時重寫兩個方法

          scrollViewDidEndDragging

          scrollViewDidEndDecelerating


    UIScrollView縮放

    • 要想縮放, 除了告訴UISrollView要縮放哪一個控件以外, 還要告訴UISrollView最小能縮多小, 最大能放多大
    ```self.sc.maximumZoomScale = 2.0;`````` self.sc.minimumZoomScale = 0.5;想要縮放, 必須明確的告訴UISrollView要縮放哪一個控件
    • 要想縮放圖片分為兩步
      • 1.成為代理, 通過代理方法告訴UIScrollView要縮放哪一個子控件
      • 2.設(shè)最大置子控件和最小的縮放比例
    • 想要縮放, 必須明確的告訴UISrollView要縮放哪一個控件
      - 因為UISrollView中可能有多個子控件
      • 那么UISrollView就搞不清楚到底要縮放哪一個子控件
      • 在此方法中告訴UISrollView要縮放哪一個控件

      - (nullable UIView *)viewForZoomingInScrollView:(nonnull UIScrollView *)scrollView { return self.iv; }

    • 和scrollViewDidScroll一樣, 只要縮放一點點就會調(diào)用

      - (void)scrollViewDidZoom:(nonnull UIScrollView *)scrollView { NSLog(@"%s", __func__); }

    • 縮放結(jié)束時調(diào)用

      - (void)scrollViewDidEndZooming:(nonnull UIScrollView *)scrollView withView:(nullable UIView *)view atScale:(CGFloat)scale { NSLog(@"%s", __func__); }


    #UIScrollView的輪播

    self.sc.pagingEnabled = YES;

    pagingEnabled實現(xiàn)分頁的本質(zhì), 是按照UIScrollView的寬度或者高度來分頁的
    UIScrollView的寬度就是一頁的寬度

    pageControl

    • 設(shè)置未顯示的頁碼顏色

      self.pageControl.pageIndicatorTintColor = [UIColor blackColor];
    • 設(shè)置當(dāng)前顯示的頁碼顏色

      self.pageControl.currentPageIndicatorTintColor = [UIColor purpleColor];
    • 設(shè)置當(dāng)前頁碼

      self.pageControl.currentPage = currnetPage;
    • 通過KVC給UIPageControl的私有屬性賦值, 設(shè)置自定義圖片

      [self.pageControl setValue:[UIImage imageNamed:@"current"] forKeyPath:@"_currentPageImage"];

      [self.pageControl setValue:[UIImage imageNamed:@"other"] forKeyPath:@"_pageImage"];


    NSTimer

    • NSTimer應(yīng)該是weak, 因為只要創(chuàng)建一個NSTimer對象, 該對象就會被主線程強(qiáng)引用

      @property (weak, nonatomic) NSTimer *timer;

      scheduledTimerWithTimeInterval: 創(chuàng)建一個定時器, 并且立即可是計時

      TimeInterval: 間隔時間

      target: 調(diào)用誰的方法

      selector:調(diào)用什么方法

      userInfo:需要傳遞什么參數(shù)

      repeats: 是否重復(fù)
    • 如果給userInfo賦值, 那么定時器調(diào)用的方法就必須接受參數(shù), 并且接受的參數(shù)就是NSTimer
    • 只要調(diào)用scheduled方法創(chuàng)建一個NSTimer對象, 系統(tǒng)就會自動將NSTimer添加到主線程中

      self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage:) userInfo:@" " repeats:YES];
    • 主線程在處理其它事件的時候, 分一點時間來處理NSTimer

      [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

    轉(zhuǎn)載于:https://www.cnblogs.com/daizeng3344/p/4684780.html

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的IOSday05 UIScrollView使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。