2

我正在尝试在 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”都出现了。但是当我旋转表冠时,什么也没有出现。

我错过了什么?

4

3 回答 3

3

当您使用WKHostingController时,您需要使用 swiftUI API 的数字皇冠。似乎标准(旧)API 只是默默地失败了。

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

@State var rotationValue = 0.0

var body: some View {
    Text("Crown did rotate: \(rotationValue)")
        .focusable(true)
        .digitalCrownRotation($rotationValue)
}
于 2020-02-26T22:06:26.440 回答
0

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

于 2019-11-18T15:27:20.117 回答
0

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

表冠将在 WKInterfaceController 类扩展中注册动作,而不是在我在问题中提到的 WKHostingController 中。

我对观察开发很陌生,所以我不知道为什么会发生这种情况,但它确实有效。

于 2019-11-18T12:35:36.820 回答