当我们尝试制作 timeInterval < 0.1 秒的计时器时,模拟器是否存在错误?
Is there a bug with simulator when we trying to make a timer with timeInterval < 0.1 second?
我正在用 Watchkit 制作一个新的秒表应用程序,首先我的应用程序非常简单,如下所示:
首先,我尝试制作一个 playButtonPressed 来启动计时器:
@IBAction func playButtonPressed() {
println("playButton pressed")
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("updateTimer"), userInfo: nil, repeats: true)
startTime = NSDate()
}
我的 updateTimer 函数是这样的:
func updateTimer() {
duration = NSDate().timeIntervalSinceDate(startTime)
println("updateTimer: \(dateStringFromTimeInterval(duration))")
timeLabel.setText(dateStringFromTimeInterval(duration))
}
dateStringFromTimeInterval 函数可以帮助我创建一个持续时间为 TimeInterval 变量的 dateString。
我在调试区域的输出一切正常,我可以在打印输出中看到日期字符串。但是我的标签在设置 timeLabel 方面滞后,您可以在此处看到:
我不知道为什么,谁能帮我解决这个问题,或者它现在可能是 apple watchkit 的一个错误?我不知道它会不会在真实设备上滞后。
谢谢
这里有几个很好的问题。不幸的是,我只有坏消息要告诉你。在过去的几周里,我一直在广泛使用 WKInterfaceTimers,它们有严重的局限性和与之相关的错误。我在这里详细分解了一些回复。
问题 1 - 使用 WKInterfaceDate 作为计时器
Apple 会非常反对这种做法,我毫不怀疑这可能是拒绝的理由。正如@mattt 提到的,您不想使用 NSTimer 来翻转日期值。每次你尝试切换日期标签时,Apple 都会将所有这些更改集中在一起,并通过 WiFi 或蓝牙将它们从 iPhone 上的扩展推送到手表。它这样做是为了优化电池寿命。
正因为如此,您将永远无法以目前的方式在手表上准确显示时间。正确的方法是使用 WKInterfaceTimer
.
问题 2 - 使用 WKInterfaceTimer
虽然 WKInterfaceTimer
可以完全满足您的需求,但它们有一些局限性。您的用例的主要一个是它只能达到秒精度,而不是毫秒。其次,计时器非常不准确。我见过它们在 50 毫秒到 950 毫秒之间的任何地方。我已按照此 radar 将此问题提请 Apple 关注。
综上所述,您当前的实现不会非常准确,并且会遭到 Apple 的反对,并且 WKInterfaceTimer 非常不准确,只能执行秒级精度。
抱歉回答不当。 :-(
我正在用 Watchkit 制作一个新的秒表应用程序,首先我的应用程序非常简单,如下所示:
首先,我尝试制作一个 playButtonPressed 来启动计时器:
@IBAction func playButtonPressed() {
println("playButton pressed")
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("updateTimer"), userInfo: nil, repeats: true)
startTime = NSDate()
}
我的 updateTimer 函数是这样的:
func updateTimer() {
duration = NSDate().timeIntervalSinceDate(startTime)
println("updateTimer: \(dateStringFromTimeInterval(duration))")
timeLabel.setText(dateStringFromTimeInterval(duration))
}
dateStringFromTimeInterval 函数可以帮助我创建一个持续时间为 TimeInterval 变量的 dateString。
我在调试区域的输出一切正常,我可以在打印输出中看到日期字符串。但是我的标签在设置 timeLabel 方面滞后,您可以在此处看到:
我不知道为什么,谁能帮我解决这个问题,或者它现在可能是 apple watchkit 的一个错误?我不知道它会不会在真实设备上滞后。 谢谢
这里有几个很好的问题。不幸的是,我只有坏消息要告诉你。在过去的几周里,我一直在广泛使用 WKInterfaceTimers,它们有严重的局限性和与之相关的错误。我在这里详细分解了一些回复。
问题 1 - 使用 WKInterfaceDate 作为计时器
Apple 会非常反对这种做法,我毫不怀疑这可能是拒绝的理由。正如@mattt 提到的,您不想使用 NSTimer 来翻转日期值。每次你尝试切换日期标签时,Apple 都会将所有这些更改集中在一起,并通过 WiFi 或蓝牙将它们从 iPhone 上的扩展推送到手表。它这样做是为了优化电池寿命。
正因为如此,您将永远无法以目前的方式在手表上准确显示时间。正确的方法是使用 WKInterfaceTimer
.
问题 2 - 使用 WKInterfaceTimer
虽然 WKInterfaceTimer
可以完全满足您的需求,但它们有一些局限性。您的用例的主要一个是它只能达到秒精度,而不是毫秒。其次,计时器非常不准确。我见过它们在 50 毫秒到 950 毫秒之间的任何地方。我已按照此 radar 将此问题提请 Apple 关注。
综上所述,您当前的实现不会非常准确,并且会遭到 Apple 的反对,并且 WKInterfaceTimer 非常不准确,只能执行秒级精度。
抱歉回答不当。 :-(