我正在将 4 个 WKInterfaceControllers 加载到 watchKit 中基于页面的水平界面中。当委托回调触发警告应用程序屏幕已被水锁时,我希望手表继续使用其中一个控制器(基于用户设置)。使用下面的代码,如果代理在水锁时触发,应用程序将按MainDisplayInterfaceController
预期继续。但是,如果委托在其他两个 interfaceControllers 中的任何一个中触发,屏幕似乎会继续,但随后会回到原来的状态WorkoutControlsInterfaceController
(即 0),但是屏幕底部的页面控件是 2 of 4?这可能是 WatchKit 错误吗?
编辑:我注意到的一个线索是,在第一个水锁上我得到了上述行为。但是如果我解锁然后再次锁定,我会得到预期的行为。
class ConfigureWorkoutInterfaceController: WKInterfaceController {
WKInterfaceController.reloadRootPageControllers(withNames: ["WorkoutControlsInterfaceController", "MainDisplayInterfaceController", "SpeedInterfaceController", "CaloriesAndDistanceInterfaceController"],
contexts: [contextDictionary, contextDictionary, contextDictionary, contextDictionary],
orientation: .horizontal,
pageIndex: 1)
}
}
extension MainDisplayInterfaceController: WaterLockStateDelegate {
func didUpdateWaterLockState(_ manager: WorkoutManager, state: Bool) {
DispatchQueue.main.async {
self.becomeCurrentPage()
}
}
}
extension SpeedInterfaceController: WaterLockStateDelegate {
func didUpdateWaterLockState(_ manager: WorkoutManager, state: Bool) {
DispatchQueue.main.async {
self.becomeCurrentPage()
}
}
extension CaloriesAndDistanceInterfaceController: WaterLockStateDelegate {
func didUpdateWaterLockState(_ manager: WorkoutManager, state: Bool) {
DispatchQueue.main.async {
self.becomeCurrentPage()
}
}