IOSday05 UIScrollView使用
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屬性 = NOenabled和userInteractionEnabled的區(qū)別
1. enabled: 代表控件不可用2. userInteractionEnabled: 代表控件不可以和用戶交互, 也就是不能響應(yīng)用戶的操作如何去掉滾動條
[self.scrollView.subviews lastObject];
設(shè)置滾動條的樣式
self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
self.scrollView.bounces = YES;
垂直方向可以回彈
self.scrollView.alwaysBounceVertical = YES;
self.scrollView.alwaysBounceHorizontal = YES;
設(shè)置內(nèi)容偏移位(contentOffset)
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)用?
- scrollViewWillBeginDragging
- 只要UIScrollView滾動了, 系統(tǒng)就會自動調(diào)用- 只要用戶準(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最小能縮多小, 最大能放多大
- 要想縮放圖片分為兩步
- 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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IE开发人员工具之实用功能讲解
- 下一篇: [Js代码风格]浅析模块模式