zoukankan      html  css  js  c++  java
  • IOS开发学习笔记035-UIScrollView-自动滚动

    让图片自动滚动的话,需要使使用定时器,循环计算当前页的页码。并且在拖动图片时停止计时器,停止拖动时启动计时器。

     

    定时器

    • 方法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、添加计时器属性

    1 @property (strong, nonatomic ) NSTimer *timer; //计时器

      2、在初始化完毕xib界面后,开启定时器

    1 // xib 初始化完毕会调用这个方法
    2 - (void)awakeFromNib
    3 {
    4    // NSLog(@"awakeFromNib-----");
    5     
    6     // 开启定时器
    7     [self startTimer];
    8

      3、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 }

      4、实现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 }

      5、实现代理方法<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 }

      6、停止和启动定时器方法

     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就可以自动滚动了。

    虽然可以自动滚动了,但是不会循环滚动,接下来就研究一下循环滚动的方法。

  • 相关阅读:
    Spring ApplicationContext 是如何被注入的
    Spring @Controller和@RestController的区别?
    怎样查看 spring IoC 容器有哪些 bean
    YYKit持续补丁 brave
    iOS如何实现多代理模式OC brave
    iOS 之获取IP地址 以及 判断个人热点是否开启 brave
    CGContext 和 CIContext brave
    android 调用微信QQ的其他应用打开列表中添加自己的应用,并且获取uri brave
    CGContext图形上下文详解 brave
    iOS scrollView如何居中缩放 brave
  • 原文地址:https://www.cnblogs.com/songliquan/p/4544640.html
Copyright © 2011-2022 走看看