watchOS 3.0 检测 SpriteKit 中的表冠旋转
watchOS 3.0 detect crown rotation in SpriteKit
从 watchOS 3.0 开始,您现在可以获取数字表冠的旋转。我设法在 InterfaceController 中使用 crownDidRotate 函数。
但是我无法从 SKScene Class 中获取表冠的旋转。
谁能帮我解决这个问题,我现在迷路了?
谢谢
要在您的界面控制器中获得那些 crownDidRotate
调用,您必须采用其 crownSequencer
的 WKCrownDelegate
protocol in your interface controller, and set your interface controller as the delegate
。
要在其他 class 中获得 crownDidRotate
调用,请采用您的界面控制器 crownSequencer
的 WKCrownDelegate
protocol in that class, and set an instance of that class as the delegate
。
想必您已经有了这样的代码来设置您的 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"))
}
}
如果你在你的MyScene
class中声明了WKCrownDelegate
一致性,只需添加一行将其设置为界面控制器皇冠音序器的委托:
let scene = MyScene(fileNamed: "MyScene")
spriteGizmo.presentScene(MyScene(fileNamed: "MyScene"))
crownSequencer.delegate = scene
(或者,您可以在 Storyboard 中设置 WKInterfaceSKScene
的场景。在这种情况下,您仍然可以使用 IBOutlet
从界面控制器中引用 WKInterfaceSKScene
。然后在awake(withContext:)
中,可以通过那个outlet访问场景,设置为皇冠代表。)
在 watchOS 3 中,任何对象都可以通过将它们设置为委托来获取数字表冠事件:
let crownSequencer = WKExtension.shared().rootInterfaceController!.crownSequencer
crownSequencer.delegate = self
crownSequencer.focus()
然后通过执行读回值:
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double)
调用 focus()
很重要,特别是对于 UI 适合屏幕且不需要实际滚动的控制器。
从 watchOS 3.0 开始,您现在可以获取数字表冠的旋转。我设法在 InterfaceController 中使用 crownDidRotate 函数。 但是我无法从 SKScene Class 中获取表冠的旋转。 谁能帮我解决这个问题,我现在迷路了? 谢谢
要在您的界面控制器中获得那些 crownDidRotate
调用,您必须采用其 crownSequencer
的 WKCrownDelegate
protocol in your interface controller, and set your interface controller as the delegate
。
要在其他 class 中获得 crownDidRotate
调用,请采用您的界面控制器 crownSequencer
的 WKCrownDelegate
protocol in that class, and set an instance of that class as the delegate
。
想必您已经有了这样的代码来设置您的 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"))
}
}
如果你在你的MyScene
class中声明了WKCrownDelegate
一致性,只需添加一行将其设置为界面控制器皇冠音序器的委托:
let scene = MyScene(fileNamed: "MyScene")
spriteGizmo.presentScene(MyScene(fileNamed: "MyScene"))
crownSequencer.delegate = scene
(或者,您可以在 Storyboard 中设置 WKInterfaceSKScene
的场景。在这种情况下,您仍然可以使用 IBOutlet
从界面控制器中引用 WKInterfaceSKScene
。然后在awake(withContext:)
中,可以通过那个outlet访问场景,设置为皇冠代表。)
在 watchOS 3 中,任何对象都可以通过将它们设置为委托来获取数字表冠事件:
let crownSequencer = WKExtension.shared().rootInterfaceController!.crownSequencer
crownSequencer.delegate = self
crownSequencer.focus()
然后通过执行读回值:
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double)
调用 focus()
很重要,特别是对于 UI 适合屏幕且不需要实际滚动的控制器。