如何制作一个能够提供最多3个十进制数的计时器?

时间:2013-10-05 08:17:55

标签: nstimer

我一直在尝试构建一个给你0.000的计时器,但我无法做到。

-(IBAction)myMethod{
    countDown = [NSTimer scheduledTimerWithTimeInterval:1/1000.0f target:self selector:@selector(flash) userInfo:nil repeats:YES];
    }

- (void) flash
{
    timeStart += 0.001f;
}

但是当我这样做时,第一个小数位变为秒而不是小数。如果我这样做:

  -(IBAction)myMethod{
    countDown = [NSTimer scheduledTimerWithTimeInterval:1/1000.0f target:self selector:@selector(flash) userInfo:nil repeats:YES];
    }

- (void) flash
{
    timeStart += 0.01f;
}

我只得到2位小数。

有关如何使这项工作的任何帮助?

1 个答案:

答案 0 :(得分:1)

适合我:

AppDelegate.h:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    NSTimer *_timer;
    float _startTime;
}

@property (assign) IBOutlet NSWindow *window;

- (void)flash:(NSTimer *)timer;

@end

AppDelegate.m:

#import "AppDelegate.h"

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    _startTime = 0.0f;
    _timer = [NSTimer scheduledTimerWithTimeInterval:1/1000.0f
                                              target:self
                                            selector:@selector(flash:)
                                            userInfo:nil
                                             repeats:YES];
}

- (void)flash:(NSTimer *)timer {
    _startTime += 0.001;
    NSLog(@"_startTime=%.3f", _startTime);
}

@end

输出:

2013-10-05 10:03:36.330 TimerTest[86869:303] _startTime=0.001
2013-10-05 10:03:36.331 TimerTest[86869:303] _startTime=0.002
2013-10-05 10:03:36.332 TimerTest[86869:303] _startTime=0.003
...
2013-10-05 10:03:37.609 TimerTest[86869:303] _startTime=0.999
2013-10-05 10:03:37.611 TimerTest[86869:303] _startTime=1.000
2013-10-05 10:03:37.612 TimerTest[86869:303] _startTime=1.001
2013-10-05 10:03:37.612 TimerTest[86869:303] _startTime=1.002

但是请注意,您不能保证计时器实际上每0.001秒发射一次,因此您应该使用不同的时钟机制计算您的增量时间,例如将开始时间保存为绝对时间以及何时触发测量方法差。