如何在 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)
}
我正在尝试在 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)
}