2016-06-14 2 views
4

Итак, на watchOS 3.0 теперь вы можете получить вращение цифровой короны. Мне удалось использовать функцию crownDidRotate в InterfaceController. Но я не могу получить вращение короны внутри класса SKScene. Может ли кто-нибудь помочь мне с этим, я потерял прямо сейчас? Спасибо.watchOS 3.0 обнаружение вращения короны в SpriteKit

ответ

7

Чтобы получить эти 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 «ы в раскадровке В этом случае, вы можете ссылаться на WKInterfaceSKScene из вашего интерфейса. контроллер с IBOutlet. Тогда в awake(withContext:), вы можете получить доступ к сцене через эту розетку и установить его в качестве коронной делегаты)

0

В watchOS-просто любой объект объекта может получить цифровые коронные события, установив их в качестве делегата:.

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

Затем считывается значение по реализации:

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

важно вызвать focus(), особенно для контроллеров, чьи интерфейс подходит к экрану и не нужна реально прокрутки.

Смежные вопросы