watchOS 3.0在SpriteKit中检测皇冠旋转

问题描述:

因此从watchOS 3.0开始,您现在可以获得数字皇冠的旋转。我设法在InterfaceController中使用crownDidRotate函数。 但是我无法从SKScene类中获得皇冠的旋转。 有人可以帮助我,我现在很迷路吗? 谢谢。watchOS 3.0在SpriteKit中检测皇冠旋转

为了让您的接口控制器的crownDidRotate电话,你不得不采用WKCrownDelegate协议在接口控制器,并设置接口控制器为crownSequencerdelegate

要获得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适应屏幕,不需要实际的滚动。