我正在创建第一个WatchOS应用程序作为iOS应用程序的伴侣。
Watch App需要能够显示宾果球,其号码是从手机发送的。由于无法使用WatchOS覆盖图像,因此创建了6个WKInterfaceControllers。一个是“主”控制器,另外五个分别具有唯一的背景图像,它是具有正确颜色(蓝色,红色,灰色,绿色和黄色)的宾果球,然后我在标签上贴上球字母和数字(即B14)。我找不到动态地操作单个WKInterfaceController的背景图像的方法-但是,如果有这样做的方法-我将不胜感激有关如何执行此操作的技巧,而我的其他问题将不存在。 / p>
当前,我正在使用Main Controller中的WatchConnectivity来接收来自手机的更新。当电话发送号码时,代码确定所需的颜色,然后以下代码为WKInterfaceController呈现正确的颜色背景:
let nextName = "\(ballColor)Controller"
DispatchQueue.main.async {
self.presentController(withName: nextName, context: message)
WKInterfaceDevice().play(.click)
}
我遇到的问题是,一旦激活第一个颜色控制器,就无法不激活当前激活的颜色控制器而激活其他颜色控制器。
那么-我该怎么做?我想我只需要一种方法来保存对活动控制器的引用,这样就可以在激活下一个球之前将其关闭-但我不知道该怎么做。
如果有人可以帮助我指出正确的方向,我将不胜感激...
预先感谢
答案 0 :(得分:0)
我不知道我原来的问题是否有答案。据我所知,似乎不可能存储对活动的WKInterfaceController的引用并从另一个控制器与之交互-但我确实找到了解决潜在问题的方法。我会发布我的发现,以防其他人以同样的方式陷入困境。
我被错误的印象是,在WatchKit中将文本覆盖在图形上的唯一方法是将WKInterfaceController背景设置为图像,然后在其上方放置标签-但是WKInterface Controller的background image属性是由于无法以编程方式进行设置,因此我为要使用的每个不同背景图像创建了一个单独的WKInterfaceController实例。但正如我所料,还有另一种更好的方法。
“组”对象还具有背景图片属性,并且可以通过编程 IS 进行设置。
我删除了5个单独的接口控制器,并用1个包含一个组的接口控制器替换了它们,然后以编程方式将来自session:didReceiveMessage的组的背景图像设置为适合从电话接收的最新数据的图像。
唯一仍然存在的复杂性是,我仍然无法从我的主WKInterfaceController(也用作WCSessionDelegate)的WKInterfaceController上操作任何东西。我发现处理此问题的唯一方法是通过立即在显示第二个控制器之前将WCSession.default.delegate从session:didReceiveMessage函数设置为nil来停用WCsession,然后在第二个控制器中的awake:withContext中再次激活它还要求我导入WatchConnectivity并遵守WCSessionDelegate。