IOSday05 UIScrollView使用
UIScrollView使用的步驟
- 1.創建UIScrollView
- 2.將需要展示的內容添加到UIScrollView中
- 3.設置UIScrollView的滾動范圍 (contentSize)
- 4.添加兩個子控件到UIScrollView中
- 5.一個控件沒有設置frame, 默認x/y就是0
scrollView不能滾動的幾種情況
1.沒有設置contentSize2.scrollEnabled屬性 = NO3.userInteractionEnabled屬性 = NOenabled和userInteractionEnabled的區別
1. enabled: 代表控件不可用2. userInteractionEnabled: 代表控件不可以和用戶交互, 也就是不能響應用戶的操作如何去掉滾動條
[self.scrollView.subviews lastObject];
設置滾動條的樣式
self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
self.scrollView.bounces = YES;
垂直方向可以回彈
self.scrollView.alwaysBounceVertical = YES;
self.scrollView.alwaysBounceHorizontal = YES;
設置內容偏移位(contentOffset)
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方法什么時候調用?
- scrollViewWillBeginDragging
- 只要UIScrollView滾動了, 系統就會自動調用- 只要用戶準備開始拖拽了就會調用
- (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最小能縮多小, 最大能放多大
- 要想縮放圖片分為兩步
- 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使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IE开发人员工具之实用功能讲解
- 下一篇: [Js代码风格]浅析模块模式