我有一个手表套件应用程序,可以通过设置来使用数字表冠
crownSequencer.delegate = self
crownSequencer.focus()
在我正在实现的界面控制器的唤醒方法中:
class InterfaceController: WKInterfaceController, WKCrownDelegate
在 watchOS 3 中,我的委托方法执行得很好:
// called when the crown rotates, rotationalDelta is the change since the last call (sign indicates direction).
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
// do something important here...
}
升级到watchos4后,此功能失效。 简单的重新编译并转换为 swift 4 没有帮助。
我只需将 CrownSequencer 代码移至界面控制器的 willActivate 方法即可解决此问题:
override func willActivate() {
...
crownSequencer.delegate = self
crownSequencer.focus()
}
在我看来,如果你太早设置焦点,watchOS 4 中的某些东西会窃取焦点(也许与我正在使用的 spritekit 有关?)。
希望这可以为其他人节省一些时间!
我无法这么简单地解决它。我需要添加延迟来重新建立对表冠的关注,如下所示:
-(void)delayDo{
self.crownSequencer.delegate=self;
[self.crownSequencer focus];
}
-(void)didAppear{
[self performSelector:@selector(delayDo) withObject:nil afterDelay:1.0f];
}