【问题标题】:Print to Console when WKInterfaceTimer reaches 0当 WKInterfaceTimer 达到 0 时打印到控制台
【发布时间】:2015-07-19 17:51:56
【问题描述】:

我希望我的程序知道计时器何时结束。我在 Xcode 7 Beta 3 (7A152u) 中使用 WKInterfaceTimer。当计数器倒计时时,“Tick Tock”会打印到控制台。但是当它达到 0 时,不会打印“Timer Done”。

    @IBOutlet var myTimer: WKInterfaceTimer!

    @IBAction func startButton() {
        myTimer.start()
        myTimer.setDate(NSDate(timeIntervalSinceNow: 4)) // Arbitrary 4 second coundown.

        // Impliment an alert.
        if myTimer == 0 {
            print("Timer Done")

        } else {
        print("Tick Tock")

    }
}

【问题讨论】:

  • 对于初学者来说,else 语句末尾缺少一个右花括号。
  • 来自 WKInterfaceTimer 文档:“要知道计时器何时达到 0,请使用与设置计时器相同的目标日期配置 NSTimer 对象”

标签: swift wkinterfacegroup


【解决方案1】:

这是我想出的解决方案。现在,计时器结束时的警报只是用“完成”打印到控制台。非常感谢用户 Prawn,因为我在这个解决方案中使用了他的一些代码。

import WatchKit
import Foundation

var myTimer : NSTimer?
var elapsedTime : NSTimeInterval = 0.0
var startTime = NSDate()
var duration : NSTimeInterval = 4.0 //Arbitrary 4 seconds to test timer.


class InterfaceController: WKInterfaceController {

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)
    WKTimer.setDate(NSDate(timeIntervalSinceNow: duration))

}


override func willActivate() {
    super.willActivate()

}

@IBOutlet var WKTimer: WKInterfaceTimer! //The WatchKit timer the user sees

@IBAction func startButton()  { //Start button

    NSTimer.scheduledTimerWithTimeInterval(duration, target: self, selector: ("timerDone"), userInfo: nil, repeats: false)
    WKTimer.setDate(NSDate(timeIntervalSinceNow: duration ))
    WKTimer.start()

}


//Reset button resets the timer back to the original time set.
@IBAction func resetButton() {
    WKTimer.stop()
    WKTimer.setDate(NSDate(timeIntervalSinceNow: duration))

}


func timerDone() {
    print("Done")

}


override func didDeactivate() {
    // This method is called when watch view controller is no longer visible
    super.didDeactivate()
}

}

【讨论】:

  • 这不是只有在定时器结束时手表处于唤醒状态时才调用timerDone方法吗?您如何确保在时间用完时调用它(可能是在带有 NSTImer 的应用程序处于睡眠状态时)。
  • 嘿 Scott - 想知道您或 Dan 是否想过如何确保在应用程序处于睡眠状态时调用它。我目前正在尝试寻找解决方法。具体来说,我希望创建某种从 3 倒计时到 0 的计时器,并每隔一秒提供一次触觉反馈。不幸的是,这仅在应用程序处于唤醒状态时才有效,因为 scheduleTimer() 在手表扩展程序处于睡眠状态时不会触发。
【解决方案2】:

你做错了。在您致电setDate 后,计时器开始倒计时。要了解计时器的实际状态,您应该实例化 NSTimer 并检查它何时触发。

来自Apple's Documentation

要知道计时器何时达到 0,请配置一个 NSTimer 对象,其目标日期与您用于设置计时器的目标日期相同。

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2012-02-07
    • 2015-05-04
    • 2016-11-19
    • 2018-07-14
    相关资源
    最近更新 更多