关闭ViewController后如何继续倒数计时器

时间:2015-07-03 07:18:13

标签: ios objective-c timer uidatepicker

我使用UIDatePicker来实现倒数计时器。加载视图datePickerMode后设置CountDownTimer:

- (void)viewDidLoad {
[super viewDidLoad];
self.countDownTimer.datePickerMode=UIDatePickerModeCountDownTimer;
}

首先,在UIDatePicker中设置倒计时时间,然后按按钮开始倒计时:

- (IBAction)StartCountdown:(id)sender {
    [sender setTitle:@"Cancel" forState:UIControlStateNormal];
    countDownInterval = (NSTimeInterval)countDownTimer.countDownDuration;
    remainder = countDownInterval;
    afterRemainder = countDownInterval - remainder % 60 ;
    //call updateCountDown()
    timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateCountDown) userInfo:nil repeats:YES];
}

致电updateCountDown()

-(void)updateCountDown{
    afterRemainder --;
    int hours = (int)(afterRemainder/(60*60));
    int mins = (int)(((int)afterRemainder/60)-(hours * 60));
    int secs = (int)(((int)afterRemainder - (60 * mins) - (60 * hours *60)));
    NSString *displayText = [[NSString alloc]initWithFormat:@"%02u : %02u : %02u",hours,mins,secs];
    self.displayLabel.text = displayText;
}

动作可以正常执行,但是当我跳出这个视图并且不会执行定时器为零时,如何操作定时器后可以持续跳转视图?

2 个答案:

答案 0 :(得分:1)

  1. 创建单例类并将内部的计时器声明为内部属性的最佳和最简洁的方法。所以在整个应用程序中只有一个计时器对象的实例。

  2. 另一种方法是在app delegate类中声明timer,它也在整个应用程序中保存对象

答案 1 :(得分:1)

我认为你可以做到:

  1. 当您跳出视图时,请将此时的状态保存到NSUserDefaults
    • 剩余时间,可能以秒为单位
    • 当时的系统时间,考试:13:20:15
  2. 再次打开视图时:
    • 获取当前系统时间,将其保存为系统时间(A)
    • 使用(A)保存剩余时间(以秒为单位)并继续倒计时。
  3. 只是一个想法,但希望它有所帮助