watchOS 3.0在SpriteKit中检测皇冠旋转
问题描述:
因此从watchOS 3.0开始,您现在可以获得数字皇冠的旋转。我设法在InterfaceController中使用crownDidRotate函数。 但是我无法从SKScene类中获得皇冠的旋转。 有人可以帮助我,我现在很迷路吗? 谢谢。watchOS 3.0在SpriteKit中检测皇冠旋转
答
为了让您的接口控制器的crownDidRotate
电话,你不得不采用WKCrownDelegate
协议在接口控制器,并设置接口控制器为crownSequencer
的delegate
。
要获得crownDidRotate
呼叫在其它的类,采用该类中WKCrownDelegate
协议,并设置类的实例作为的delegate
你的接口控制器的crownSequencer
。
想必你已经有一些这样的代码来设置SpriteKit场景:
class InterfaceController: WKInterfaceController {
@IBOutlet var spriteGizmo: WKInterfaceSKScene!
override func awake(withContext context: AnyObject?) {
super.awake(withContext: context)
let scene = MyScene(fileNamed: "MyScene")
spriteGizmo.presentScene(MyScene(fileNamed: "MyScene"))
}
}
如果你已经声明WKCrownDelegate
符合您的MyScene
类,只需添加一条线,将其设置为的委托接口控制器的冠序:
let scene = MyScene(fileNamed: "MyScene")
spriteGizmo.presentScene(MyScene(fileNamed: "MyScene"))
crownSequencer.delegate = scene
(或者,你可以通过设置在故事板的WKInterfaceSKScene
的场景在这种情况下,你仍然可以从你的接口引用WKInterfaceSKScene
。控制器与IBOutlet
。然后在awake(withContext:)
,您可以通过该出口进入现场,并设置为冠代表)
答
在watchOS 3只是任何物体对象可以将其设定为一个代表获得数字树冠事件:
let crownSequencer = WKExtension.shared().rootInterfaceController!.crownSequencer
crownSequencer.delegate = self
crownSequencer.focus()
然后通过实现回读值:
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double)
重要的是要调用focus()
,特别是对控制器,其UI适应屏幕,不需要实际的滚动。