【问题标题】:Get WatchOS Digital Crown value获取 WatchOS Digital Crown 价值
【发布时间】:2017-08-17 04:31:55
【问题描述】:

我一直在做一些关于制作 Apple Watch 应用的研究,但我在了解 Digital Crown 的价值时遇到了一些麻烦。我查看了 WKCrownSequencer,但不确定如何处理它。有人可以告诉我如何获得一个值 1-10 的变量,当你转动 Digital Crown 时它会发生变化。谢谢!

【问题讨论】:

标签: swift watchkit


【解决方案1】:

您需要使您的InterfaceController 子类符合WKCrownDelegate 并实现crownDidRotate 方法。

如果您希望您的值介于 1 和 10 之间,您只需要实现一些简单的逻辑来检查添加 rotationalDelta 时的值是什么,以及它是否超出了 1-10 的范围,将值映射到 1 或 10,具体取决于新值将超出的方向。我假设您希望value 成为Int,如果不是,只需删除rotationalDeltaInt 的转换,value 将是Double

请记住,rotationalDelta 为 1.0 表示表冠旋转一圈,rotationalDelta 根据旋转方向更改其符号。

class MyInterfaceController: WKInterfaceController, WKCrownDelegate {
    var value = 1
    @IBOutlet var label: WKInterfaceLabel!

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)
        crownSequencer.delegate = self
    }

    func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
        let newValue = value + Int(rotationalDelta)
        if newValue < 1 {
            value = 1
        } else if newValue > 10 {
            value = 10
        } else {
            value = newValue
        }
        label.setText("Current value: \(value)")
    }
}

【讨论】:

  • 您好,感谢您的回答!在实现这一点时,我需要一个新类,因为我试图将 WKInterfaceController 和 WKCrownDelegate 放入类游戏场景中,但它与已经存在的 SKScene 存在问题。
  • 请在问题中包含您的类定义,以便我可以提供帮助,如果没有上下文,我无法确定导致此问题的原因是什么。但是你肯定需要让 InterfaceController 类符合你想用冠控制的 WKCrownDelegate 协议。
  • 你应该在设置委托后添加crownSequencer.focus()到awake(withContext)
【解决方案2】:

watchOS 3 之后

watchOS3 之后可以拿 Digital Crown 的价值。检查this documentation on Apple.

基本上你需要在你的视图控制器中使用WKCrownDelegate。示例代码如下所示:

- (void)willActivate {
    [super willActivate];
    self.crownSequencer.delegate = self;
    [self.crownSequencer focus];
}

- (void)crownDidRotate:(WKCrownSequencer *)crownSequencer rotationalDelta:(double)rotationalDelta {
    self.totalDelta = self.totalDelta + rotationalDelta;
    [self updateLabel];
}

- (void)updateLabel {
    [self.label setText:[NSString stringWithFormat:@"%f", self.totalDelta]];
}

什么是旋转增量

值 1.0 表示表冠已完成一整圈。

警告

请不要直接使用此代码,这只是一个示例。首先查看 Apple 网站上的文档。

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2019-08-02
    • 2017-08-15
    相关资源
    最近更新 更多