我怎样才能以与时钟应用程序完全相同的方式向我的应用添加一个简单的2分钟计时器?我只是希望用户点击“开始”,让计时器开始显示从2点开始倒计时的计时器,并在点击0点时发出蜂鸣声。
答案 0 :(得分:2)
我已经创建了一些用于生成计时器的基本代码。
当用户选择启动计时器时,将调用此方法:
-(void)startTimer{
timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(countdown) userInfo:nil repeats:YES];//Timer with interval of one second
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}
触发计时器时将调用此方法:
-(void)countdown{
NSLog(@"Countdown : %d:%d",minutesValue,secondsValue);//Use this value to display on your UI Screen
[self countdownSeconds];//Decrement the time by one second
}
将调用此方法将时间减少一分钟:
-(void)countdownMinutes{
if(minutesValue == 0)
[self stopTimer];
else
--minutesValue;
}
将调用此方法将时间减少一秒:
-(void)countdownSeconds{
if(secondsValue == 0 )
{
[self countdownMinutes];
secondsValue = 59;
}
else
{
--secondsValue;
}
}
当计时器到达零时调用此方法:
-(void)stopTimer{
[timer invalidate]; //Stops the Timer and removes from runloop
NSLog(@"Countdown completed"); // Here you can add your beep code to notify
}
一个重要的事情“timer”,“minutesValue”和“secondsValue”是实例变量。
答案 1 :(得分:1)
我昨天写了这篇文章,你可能会发现它很有帮助。这是一种从NSTimeInterval中提取小时,分钟和秒的方法(这是一个结构双重表示两次之间的秒数 - 在本例中为NSDate self.expires
和[NSDate date]
,即现在)。这发生在自定义表格单元格视图中。最后,我们在一个小秒表显示器上更新了三个UILabel。
-(void)updateTime
{
NSDate *now = [NSDate date];
NSTimeInterval interval = [self.expires timeIntervalSinceDate:now];
NSInteger theHours = floor(interval / 3600);
interval = interval - (theHours * 3600);
NSInteger theMinutes = floor(interval / 60);
interval = interval - (theMinutes * 60);
NSInteger theSeconds = floor(interval);
NSLog(@"%d hours, %d minutes, %d seconds", theHours, theMinutes, theSeconds);
self.hours.text = [NSString stringWithFormat:@"%02d", theHours];
self.minutes.text = [NSString stringWithFormat:@"%02d", theMinutes];
self.seconds.text = [NSString stringWithFormat:@"%02d", theSeconds];
}
然后在其他地方设置一个计时器,每秒调用一次这个方法。定时器不能保证在确切的特定时间运行,这就是为什么你不能只计算一些静态变量,或者你有可能随着时间的推移累积错误。相反,你实际上必须为每次通话做新的数学运算。
请确保保留指向计时器的指针,并在viewcontroller消失时使其无效!
答案 2 :(得分:0)
这可能正是您想要的Orientation aware clock tutorial
答案 3 :(得分:0)
您可以使用NSTimer。