日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

IOSday05 UIScrollView使用

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

UIScrollView使用的步驟

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

scrollView不能滾動的幾種情況

1.沒有設置contentSize2.scrollEnabled屬性 = NO3.userInteractionEnabled屬性 = NO

enabled和userInteractionEnabled的區別

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

如何去掉滾動條

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


    設置滾動條的樣式

    self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;

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

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

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


    設置內容偏移位(contentOffset)

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

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

    2.設置滾動范圍

    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實現分頁的本質, 是按照UIScrollView的寬度或者高度來分頁的
    UIScrollView的寬度就是一頁的寬度


    UIScrollViewDelegate

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

        代理作用:

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

      • 只要成為了UIScrollView的代理, 遵守代理協議, 實現協議中的方法
        當UIScrollView發生一些變化的時候, 系統就會自動調用這些代理方法

      - scrollViewDidScroll方法什么時候調用?
      - 只要UIScrollView滾動了, 系統就會自動調用

      - scrollViewWillBeginDragging
      • 只要用戶準備開始拖拽了就會調用

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

    • 每次調用 停止拖拽方法時 ,系統都會傳入一個當前是否有慣性的參數
      我們可以判斷該參數是否為YES, 如果是YES代表當前UIScrollView有慣性, 停止拖拽并不會停止滾動, 需要在停止減速方法中監聽什么時候真正的停止

    UIScrollView已經停止減速了

    • 只有執行了這個方法才代表UIScrollView已經停止滾動了

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

    注意:

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

          scrollViewDidEndDragging

          scrollViewDidEndDecelerating


    UIScrollView縮放

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

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

    • 和scrollViewDidScroll一樣, 只要縮放一點點就會調用

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

    • 縮放結束時調用

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


    #UIScrollView的輪播

    self.sc.pagingEnabled = YES;

    pagingEnabled實現分頁的本質, 是按照UIScrollView的寬度或者高度來分頁的
    UIScrollView的寬度就是一頁的寬度

    pageControl

    • 設置未顯示的頁碼顏色

      self.pageControl.pageIndicatorTintColor = [UIColor blackColor];
    • 設置當前顯示的頁碼顏色

      self.pageControl.currentPageIndicatorTintColor = [UIColor purpleColor];
    • 設置當前頁碼

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

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

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


    NSTimer

    • NSTimer應該是weak, 因為只要創建一個NSTimer對象, 該對象就會被主線程強引用

      @property (weak, nonatomic) NSTimer *timer;

      scheduledTimerWithTimeInterval: 創建一個定時器, 并且立即可是計時

      TimeInterval: 間隔時間

      target: 調用誰的方法

      selector:調用什么方法

      userInfo:需要傳遞什么參數

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

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

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

    轉載于:https://www.cnblogs.com/daizeng3344/p/4684780.html

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。