1.沒有設置contentSize 2.scrollEnabled屬性 = NO 3.userInteractionEnabled屬性 = NO
1. enabled: 表明控件不可用 2. userInteractionEnabled: 表明控件不能夠和用戶交互, 也就是不能響應用戶的操做
[self.scrollView.subviews lastObject];
oop
self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
ui
self.scrollView.bounces = YES;
atom
self.scrollView.alwaysBounceVertical = YES;
線程
self.scrollView.alwaysBounceHorizontal = YES;
代理
sc.contentOffset = CGPointMake(100, 0);
code
self.sc.contentSize = CGSizeMake(IMAGE_COUNT * width, height);
orm
self.sc.contentSize = CGSizeMake(width, IMAGE_COUNT * height);
對象
self.sc.bounces = NO;
繼承
self.sc.pagingEnabled = YES;
事件
pagingEnabled
實現分頁的本質, 是按照UIScrollView的寬度或者高度來分頁的
UIScrollView的寬度就是一頁的寬度
當B對象發生一些變化想通知A對象, 那麼可讓A成爲B的代理
self.sc.delegate = self;
只要成爲了UIScrollView的代理, 遵照代理協議, 實現協議中的方法
當UIScrollView發生一些變化的時候, 系統就會自動調用這些代理方法
- scrollViewDidScroll
方法何時調用?
- 只要UIScrollView滾動了, 系統就會自動調用
- scrollViewWillBeginDragging
- (void)scrollViewDidEndDragging:(nonnull UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
UIScrollView已經中止減速了
- (void)scrollViewDidEndDecelerating:(nonnull UIScrollView *)scrollView
因此: 之後要判斷UIScrollView是否中止滾動, 須要同時重寫兩個方法
scrollViewDidEndDragging
scrollViewDidEndDecelerating
```self.sc.maximumZoomScale = 2.0;``` ``` self.sc.minimumZoomScale = 0.5;想要縮放, 必須明確的告訴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__); }
self.sc.pagingEnabled = YES;
pagingEnabled
實現分頁的本質, 是按照UIScrollView的寬度或者高度來分頁的
UIScrollView的寬度就是一頁的寬度
設置未顯示的頁碼顏色
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應該是weak, 由於只要建立一個NSTimer對象, 該對象就會被主線程強引用
@property (weak, nonatomic) NSTimer *timer;
scheduledTimerWithTimeInterval:
建立一個定時器, 而且當即但是計時
TimeInterval:
間隔時間
target:
調用誰的方法
selector:
調用什麼方法
userInfo:
須要傳遞什麼參數
repeats:
是否重複只要調用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];