Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本iphone定时器示例_Iphone_Objective C - Fatal编程技术网

基本iphone定时器示例

基本iphone定时器示例,iphone,objective-c,Iphone,Objective C,好的,我在网上搜索过,甚至在几本书中寻找答案,因为我无法理解NSTimer的苹果文档。我试图在同一个视图上实现2个计时器,每个计时器都有3个按钮(开始-停止-重置) 第一个计时器从2分钟开始倒计时,然后发出嘟嘟声 第二个计时器从00:00开始无限期地递增 我假设所有的代码都是用3个不同按钮后面的方法编写的,但是我完全无法阅读苹果的文档。任何帮助都将不胜感激。基本上,您需要的是每1秒触发一次事件,或者可能每隔1/10秒触发一次事件,并且当计时器滴答作响时,您将更新UI 下面将创建一个计时器,并将其

好的,我在网上搜索过,甚至在几本书中寻找答案,因为我无法理解NSTimer的苹果文档。我试图在同一个视图上实现2个计时器,每个计时器都有3个按钮(开始-停止-重置)

第一个计时器从2分钟开始倒计时,然后发出嘟嘟声

第二个计时器从00:00开始无限期地递增


我假设所有的代码都是用3个不同按钮后面的方法编写的,但是我完全无法阅读苹果的文档。任何帮助都将不胜感激。

基本上,您需要的是每1秒触发一次事件,或者可能每隔1/10秒触发一次事件,并且当计时器滴答作响时,您将更新UI

下面将创建一个计时器,并将其添加到运行循环中。将计时器保存在某个地方,以便在需要时关闭它


- (NSTimer*)createTimer {

    // create timer on run loop
    return [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTicked:) userInfo:nil repeats:YES];
}
现在为计时器勾号编写一个处理程序:

- (void)timerTicked:(NSTimer*)timer { // decrement timer 1 … this is your UI, tick down and redraw [myStopwatch tickDown]; [myStopwatch.view setNeedsDisplay]; // increment timer 2 … bump time and redraw in UI … }
希望这对您有所帮助。

我会遵循Jonathan的方法,除非您应该使用NSDate作为更新UI的参考。这意味着,当NSTimer触发时,您不需要根据NSTimer更新勾号,而是取NSDate与参考日期之间的差值


原因是,NSTimer的分辨率为50-100毫秒,这意味着如果有很多事情会使设备速度减慢,那么几分钟后计时器可能会变得非常不准确。使用NSDate作为参考点将确保实际时间和显示时间之间的唯一延迟是计算该差异和显示的渲染

首先,非常感谢你的帮助,但我还是有点困惑。UILabel和iAction使用什么?你的代码似乎没有那些应该在那里的东西,不是吗?我强烈建议你买一本Aaron Hillegass的书,Mac(R)OS X的Cocoa(R)编程(第三版)。如果您阅读本文并仔细阅读示例,您将对Objective-C和Cocoa(包括Interface Builder)有深入的了解。老实说,花30美元和一段时间,这可能是你能做的最好的投资。我要跑了,宝贝要喂!是的,在回答您的评论时,我跳过了UI的实现。没错,您需要一个UIWindow,其中包含一些控件,当用户点击这些控件时,这些控件将生成事件。事件将需要路由到视图控制器中的iAction标记方法。正如你所说,一个或两个UILabel用来保存秒表读数。我知道这很旧,但万一有人遇到它:NSTimer实际上在两次火灾之间保持了这种分辨率,这意味着它在50-100毫秒的分辨率下始终是准确的,决不会(在极端情况下)比这更糟。请参阅中的计时器容差。@robotpsyche是对的,我尝试在两台设备(iphone和ipad)上使用
NSTimer
,你猜怎么着,在20分钟内,计时器之间的差异是12秒!!!,这是不可接受的,我将使用
NSDate
。请参阅

- (void)actionStop:(id)sender {

    // stop the timer
    [myTimer invalidate];
}