2

我正在将 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()
                    }
    }
4

0 回答 0