iPhone SDK: 倒计时计时器

3

请帮忙,我想使用iPhone SDK创建倒计时计时器。我已经有当前时间:

NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm"];
NSString *currentTime = [dateFormatter stringFromDate:today];
[dateFormatter release];

从数据库中获取时间,例如:当前时间为19:18:30,从数据库中获取的时间为19:20:01。因此,计时器应该设置为0:01:31并开始倒计时。当达到0:00:00时,再从数据库中取出另一个时间(例如:19:21:00),设置计时器(0:00:59)并重新开始倒计时。当达到0:00:00时,再次重复上述步骤。计时器应该由UILabel显示。希望能够帮到您,祝好! :)

获取当前日期的目的是什么,而不仅仅是创建一个具有所需时间的NSTimer? - Jumhyn
1个回答

8

请尝试这个。我只写了解决方案所需的必要方法。不要忘记实现dealloc等。

CountdownViewController.h

  @interface CountdownViewController : UIViewController {     
        IBOutlet UILabel *clockLabel;
        NSDate *databaseDate;
        NSTimer *timer;
    }

    @property(nonatomic, retain) IBOutlet UILabel *clockLabel;
    @property(nonatomic, retain) NSDate *databaseDate;

    @end

CountdownViewController.m

@implementation CountdownViewController

@synthesize clockLabel;
@synthesize databaseDate;

- (void) showClock {
    NSTimeInterval remainingSec = [databaseDate timeIntervalSinceNow];
    if (!timer || remainingSec <= 0) {
        [timer invalidate];
        timer = nil;
        // getting time from database
        self.databaseDate = [NSDate dateWithTimeIntervalSinceNow:20.0];
        remainingSec = [databaseDate timeIntervalSinceNow];
        timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self 
                                               selector:@selector(showClock)  
                                               userInfo:nil 
                                                repeats:YES];
    }

    NSInteger hours = remainingSec / 3600;
    NSInteger remainder = ((NSInteger)remainingSec)% 3600;
    NSInteger minutes = remainder / 60;
    NSInteger seconds = remainder % 60;

    clockLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}

@end

嗨。感谢您的快速回答和完美简单的解决方案! - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接