NSDates和TimeIntervals

时间:2014-09-30 21:47:20

标签: ios nsdate nstimeinterval

我很难理解如何正确使用NSDates。

我有一个实例化timingDate = [NSDate date];

的事件

然后我会记录用户触摸之间的时间间隔。 所以我想找到timingDate和用户触摸之间的间隔,以毫秒为单位。 然后我想将timingDate重置为等于touchTime,以便下次触摸屏幕时我可以找到前一次触摸和当前触摸之间的差异。我希望这是有道理的。但我在圈子里走动,因为我不明白如何使用NSDates或NSIntervals。属性间隔touchTime和timingDate都是当前的NSDate类型 - 这是对的吗?

所以我尝试了很多不同的东西,比如

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    touchTime = timingDate;
    interval  = [[NSDate date] timeIntervalSinceDate:timingDate]; // should be the time difference from when the timingDate was first set and when the user touched the screen.
    touchTime = [[[NSDate date]timeIntervalSinceDate:timingDate]doubleValue];
    timingDate = [NSDate dateWithTimeIntervalSinceReferenceDate:touchTime];
    NSLog(@"Time taken Later: %f", [[NSDate date]timeIntervalSinceDate:timingDate]);
  }

3 个答案:

答案 0 :(得分:1)

NSTimeInterval是一个表示秒数的双精度数。

NSDate是一个保存日期/时间的对象。

以下是一个例子:

@property(nonatomic, strong) NSDate * lastTouchDate;

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    NSTimeInterval secondsSinceLastTouch = 0;

    if(self.lastTouchDate){

        secondsSinceLastTouch = [[NSDate date] timeIntervalSinceDate:self.lastTouchDate];

        NSLog(@"It's been %.1f seconds since the user touched the screen", secondsSinceLastTouch);

    }else{

        NSLog(@"This is the first time the user touched the screen");

    }

    self.lastTouchDate = [NSDate date];

}

如果您不希望上次触摸它之间的间隔,请不要在初始化后更新self.lastTouchDate,它将是自初始化日期以来的秒数。

答案 1 :(得分:1)

你的代码有点复杂!您只需计算timingDate与触摸发生时间之间的差异,然后将timingDate设置为当前时间,以便您可以对每个触摸事件执行此计算。

要查找timingDate与第一次触摸之间的差异,您可以将NSDate的timeIntervalSinceDate与当前时间一起使用。这将返回NSTimeInterval值,该值表示以亚毫秒精度为单位的时间值(以秒为单位)。这是一个例子:

NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:timingDate];
NSLog(@"Time taken: %f seconds / %f milliseconds",timeInterval,timeInterval*1000);

然后,为了将timingDate设置为当前时间,只需使用timingDate = currentDate;即可。这样您就可以连续测量触摸之间的时差。

答案 2 :(得分:1)

因此,您需要了解的第一件事是-[NSDate timeIntervalSinceDate:]返回NSTimeInterval,这实际上只是一个双倍值。

在上面的示例中,您尚未使用类型声明变量,但是如果查看变量interval的值,则应该是自timingDate表示的时间以来的秒的十进制值


假设timingDateNSDate对象,并且在运行此代码之前设置它,此代码应将时间(秒)打印到调试控制台。

NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:timingDate];
NSLog(@"Time between touches %f", interval);

这是NSDate类文档,以防您在找到它时遇到问题。 (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/index.html#//apple_ref/doc/c_ref/NSDate