如何在 WatchOS 6 中将表冠输入打印到控制台

How to Print Crown Input to Console in WatchOS 6

我正在尝试在 Apple Watch 中打印表冠输入,但无法正常工作。

我创建了一个新的手表应用程序(仅限手表)。

我的 HostingController 中有这个:

import WatchKit
import Foundation
import SwiftUI

class HostingController: WKHostingController<ContentView>, WKCrownDelegate {

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)

        print("awake")

        crownSequencer.delegate = self
    }

    override func willActivate() {
        super.willActivate()

        print("willActivate")

        crownSequencer.focus()
    }

    func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
        print("\(rotationalDelta)")
    }

    override var body: ContentView {
        return ContentView()
    }
}

在控制台中 "awake" 和 "willActivate" 都出现了。但是当我旋转表冠时没有任何显示。

我错过了什么?

好的,经过大量的挖掘和测试,我解决了这个问题。

皇冠 将在 WKInterfaceController class 扩展中注册移动,而不是在我的问题中提到的 WKHostingController 中。

我对观看开发还很陌生,所以我不明白为什么会这样,但它确实有效。

说真的,如果你使用 swiftUI 解决方案,你应该使用 combine 来执行通信,即监控 crownSequencer 值。

当您使用 WKHostingController 时,您将需要使用 swiftUI API 的数字表冠。看起来标准(旧)API 只是默默地失败了。

您需要一个 @State 变量来绑定皇冠,使 ui 元素可聚焦并添加皇冠修饰符。

@State var rotationValue = 0.0

var body: some View {
    Text("Crown did rotate: \(rotationValue)")
        .focusable(true)
        .digitalCrownRotation($rotationValue)
}