4

因此,从 watchOS 3.0 开始,您现在可以获得数字表冠的旋转。我设法在 InterfaceController 中使用了crownDidRotate函数。但我无法从 SKScene 类中旋转表冠。有人可以帮我解决这个问题吗?我现在很迷茫?谢谢。

4

2 回答 2

8

要在接口控制器中获取这些crownDidRotate调用,您必须在接口控制器中采用WKCrownDelegate协议,并将接口控制器设置delegate为其crownSequencer.

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在 Storyboard 中设置您的场景。在这种情况下,您仍然可以WKInterfaceSKScene使用接口控制器引用IBOutlet。然后在 中awake(withContext:),您可以通过该插座访问场景并将其设置为冠代表。)

于 2016-06-15T03:53:12.497 回答
0

在 watchOS 3 中,任何对象对象都可以通过将它们设置为委托来获取数字皇冠事件:

let crownSequencer = WKExtension.shared().rootInterfaceController!.crownSequencer
crownSequencer.delegate = self
crownSequencer.focus()

然后通过实现读回该值:

func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double)

调用 很重要focus(),尤其是对于 UI 适合屏幕且不需要实际滚动的控制器。

于 2016-09-28T12:26:55.270 回答