IOS開發學習筆記035-UIScrollView-自動滾動

讓圖片自動滾動的話,須要使使用定時器,循環計算當前頁的頁碼。而且在拖動圖片時中止計時器,中止拖動時啓動計時器。ide

 

定時器

  • 方法1: performSelector 
1     [self performSelector:@selector(hideHUD) withObject:nil afterDelay:2.0];
2     - (void)hideHUD
3     {
4         _hudLable.hidden = YES;
5     }
  • 方法2: GCD
1     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)),
2                 dispatch_get_main_queue(), ^{
3         _hudLable.hidden = YES;
4     });
  • 方法3: scheduledTimerWithTimeInterval
1     [NSTimer scheduledTimerWithTimeInterval:3.0
2         target:self selector:@selector(hideHUD) userInfo:nil repeats:NO];

 

  • 方法4:timerWithTimeInterval
 1     // 1 建立定時器,由系統控制其生命週期
 2     [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
 3     // 2 建立定時器,不過是局部變量
 4     //NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
 5     // 手動啓動定時器
 6     //[timer fire];
 7 
 8     - (void)nextPage
 9     {
10         NSLog(@"nextPage:%ld", self.pageControl.currentPage);
11 
12     }
  • 設置定時器線程的優先級
1 - (void)startTimer
2 {
3     //  建立定時器
4     self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
5     // 設置計時器線程的優先級和其餘線程同樣
6     [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
7 }

 

代碼實現

  一、添加計時器屬性

1 @property (strong, nonatomic ) NSTimer *timer; //計時器

  二、在初始化完畢xib界面後,開啓定時器

1 // xib 初始化完畢會調用這個方法
2 - (void)awakeFromNib
3 {
4    // NSLog(@"awakeFromNib-----");
5     
6     // 開啓定時器
7     [self startTimer];
8

  三、startTimer方法實現:建立定時器

1 - (void)startTimer
2 {
3     //  建立定時器
4     self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
5     // 設置計時器線程的優先級和其餘線程同樣
6     [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
7 }

  四、實現nextPage方法,滾動到下一個界面

 1 - (void)nextPage
 2 {
 3     NSLog(@"nextPage---");
 4     // 下一個頁面,對總數取餘的頁碼,循環滾動
 5     NSInteger page = (self.pageControl.currentPage + 1) % self.scrollView.subviews.count;
 6     // 計算偏移量,索引值和scrollView寬度的積
 7     CGPoint offset = CGPointMake(page * self.scrollView.frame.size.width, 0);
 8     // 設置新的偏移量
 9     [self.scrollView setContentOffset:offset animated:YES];
10 }

  五、實現代理方法<UIScrollViewDelegate>:拖動狀態

 1 #pragma mark - 定時器
 2 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
 3 {
 4     // 沒有拖動圖片就開始定時器
 5     [self startTimer];
 6 }
 7 
 8 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
 9 {
10     // 一旦開始拖動就中止計時器
11     [self stopTimer];
12 }

  六、中止和啓動定時器方法

 1 - (void)startTimer
 2 {
 3     //  建立定時器
 4     self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
 5     // 設置計時器線程的優先級和其餘線程同樣
 6     [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
 7 }
 8 
 9 
10 - (void)stopTimer
11 {
12     [self.timer invalidate]; // 中止計時器
13     self.timer = nil; //清空指針
14 }

 

以上步驟結束,scrollView就能夠自動滾動了。oop

 

雖然能夠自動滾動了,可是不會循環滾動,接下來就研究一下循環滾動的方法。atom

相關文章
相關標籤/搜索