iOS开发iOS进阶指南iOS Developer

iOS 一个简单的定时器(NSTimer)的封装

2016-07-30  本文已影响927人  Codepgq

在项目开发中我们有的时候需要用到计时器,比如登录超时,scrollview的滚动等,那么就让我们自己手动的去创建一个类库吧。

于是乎这样子的一个类方法就创建完了

/**
 *  快速创建一个定时器,用type区分要不要一开始就执行
 *
 *  @param type
 *  @param interval
 *  @param repeatInterval
 *  @param block
 *
 *  @return 
 */
+ (instancetype)pq_createTimerWithType:(PQ_TimerType)type updateInterval:(NSTimeInterval)interval repeatInterval:(NSTimeInterval)repeatInterval update:(TimerUpdateBlock)block
+ (instancetype)pq_createTimerWithType:(PQ_TimerType)type updateInterval:(NSTimeInterval)interval repeatInterval:(NSTimeInterval)repeatInterval update:(TimerUpdateBlock)block{
    PQ_TimerManager * timerManager = [[self alloc]init];
    //多少秒更新一次
    timerManager.timeSumInterval = interval;
    //多少秒执行一次
    timerManager.repeatTime = repeatInterval;
    //保存block
    timerManager.updateBlock = block;
    //判断类型
    if(type == PQ_TIMERTYPE_CREATE_OPEN){
        [timerManager pq_open];
    }
    return timerManager;
}

/**
 *  打开
 */
- (void)pq_open{
    //开启之前先关闭定时器
    [self pq_close];
    //把计数器归零
    self.timeInterval = 0;
    //创建timer
    self.timer = [NSTimer scheduledTimerWithTimeInterval:self.repeatTime target:self selector:@selector(pq_timeUpdate) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    self.isStart = YES;
}
//更新时间
- (void)pq_timeUpdate{
    //如果不是开始 直接返回 并且归零计数器
    if (!self.isStart) {
        return;
    }
    self.timeInterval ++;
    NSLog(@"%f",self.timeInterval);
    if (self.timeInterval == self.timeSumInterval) {
        self.timeInterval = 0;
        self.updateBlock();
    }
}

/**
 *  关闭
 */
- (void)pq_close{
    [self.timer setFireDate:[NSDate distantFuture]];
    self.timer = nil;
}
/**
 *  把时间设置为零
 */
- (void)pq_updateTimeIntervalToZero{
    self.timeInterval = 0;
}
/**
 *  更新现在的时间
 *
 *  @param interval
 */
- (void)pq_updateTimeInterval:(NSTimeInterval)interval{
    self.timeInterval = interval;
}

/**
 *  开机计时
 */
- (void)pq_start{
    self.isStart = YES;
}
/**
 *  暂停计时
 */
- (void)pq_pause{
    self.isStart = NO;
}
/**
 *  开始计时器
 */
- (void)pq_distantPast{
    [self.timer setFireDate:[NSDate distantPast]];
}
/**
 *  暂停计时器
 */
- (void)pq_distantFuture{
    [self.timer setFireDate:[NSDate distantFuture]];
}
self.timerManager = [PQ_TimerManager pq_createTimerWithType:PQ_TIMERTYPE_CREATE_OPEN updateInterval:3 repeatInterval:1 update:^{
      //这里处理事件、UI
    }];

我只是对NSTimer进行的很简单的封装,其中可能有逻辑不是很合理的地方,如果您发现了,麻烦告知。当然了,如果刚好对你有用,也麻烦给个星。
demo地址 https://github.com/codepgq/PQSimpleTimer

上一篇下一篇

猜你喜欢

热点阅读