我很难理解如何正确使用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]);
}
答案 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
表示的时间以来的秒的十进制值
假设timingDate
是NSDate
对象,并且在运行此代码之前设置它,此代码应将时间(秒)打印到调试控制台。
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)