好的,这是一个棘手的问题。当用户点击并按住屏幕时,我想要提供信息性警告框。
以下是我用来执行此操作的代码(在Objective-C SpriteKit中):
在我的touchesBegan:withEvent:
方法中,我有这个:
tapBegin = [NSDate date];
猜测是否使用当前日期和时间生成NSDate
对象(Objective-C和Apple等同于DateTime date = Now
)。
在我的touchesEnded:withEvent:
方法中,我有这个:
NSDate *endTap = [NSDate date];
NSDateComponents *comps = [[NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian] components:NSCalendarUnitSecond fromDate:tapBegin toDate:endTap options:0];
if (comps.second >= 1) {
// tap and hold event
} else {
// normal tap event
}
结果应为:如果用户点按并持有超过一秒的内容,则if
语句应为true
,如果不是,则应为false
实际结果有奇怪的行为:如果用户试图点击某些内容,他们会随机获取点按并保持事件。我该如何解决这个问题?
答案 0 :(得分:1)
如果您想获得两个日期之间的差异,那么您应该使用timeIntervalSinceDate:
我会将touchesEnded:withEvent:
更改为以下内容:
NSDate *endTap = [NSDate date];
NSTimeInterval diff = [tapBegin timeIntervalSinceDate:endTap];
NSTimeInterval threshold = 1.0;
if (diff >= threshold) {
// tap and hold event
} else {
// normal tap event
}