当我们尝试使用timeInterval <0.1秒制作计时器时,模拟器是否存在错误?

Hie*_*ham 3 ios swift watchkit

我正在用Watchkit制作一个新的秒表应用程序,首先我的应用程序非常简单,如下所示: 应用程序屏幕

首先,我试图让playButtonPressed启动一个计时器:

@IBAction func playButtonPressed() {
    println("playButton pressed")
    timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("updateTimer"), userInfo: nil, repeats: true)
        startTime = NSDate()


}
Run Code Online (Sandbox Code Playgroud)

我的updateTimer函数如下:

func updateTimer() {

 duration = NSDate().timeIntervalSinceDate(startTime)
    println("updateTimer: \(dateStringFromTimeInterval(duration))")

    timeLabel.setText(dateStringFromTimeInterval(duration))

}
Run Code Online (Sandbox Code Playgroud)

dateStringFromTimeInterval函数可以帮我创建一个持续时间为DateInterval变量的dateString.

我在Debug区域输出的每一件事都没问题,我可以在printOut看到dateString.但是我的标签在设置timeLabel方面有所滞后,你可以在这里看到: 输出inDebug区域正常,但标签滞后.

我不知道为什么,任何人都可以帮我解决这个问题,或者现在可能是苹果watchkit的错误吗?我不知道它会在真实设备上落后.谢谢

cno*_*oon 5

你在这里有好几个问题.不幸的是,我只有坏消息.在过去的几周里,我一直在与WKInterfaceTimers进行广泛的合作,他们有严重的限制和与之相关的错误.我在这里详细介绍了几个回复.

问题1 - 使用WKInterfaceDate作为计时器

这对苹果公司来说确实是不受欢迎的,我不会怀疑这可能是拒绝的理由.正如@mattt所提到的,您不希望使用NSTimer来翻转日期值.每当您尝试切换日期标签时,Apple都会将所有这些更改整合在一起,并将它们从iPhone上的Extension扩展到通过WiFi或蓝牙观看.这样做是为了尝试优化电池寿命.

因此,您将永远无法以当前的方式准确显示Watch上的时间.正确的方法是使用a WKInterfaceTimer.

问题2 - 使用WKInterfaceTimer

虽然WKInterfaceTimers的构建完全符合您的要求,但它们有一些局限性.您的用例的主要特点是它只能达到第二精度,而不是毫秒.其次,计时器非常不准确.我已经看到他们在50ms到950ms之间的任何地方.我跟着这个雷达把这个问题引起了Apple的注意.

总之,您当前的实现不会非常准确,并且Apple会不赞成,WKInterfaceTimer非常不准确,只能执行第二精度.

对不起,他说道.:-(