watchOS 3.0 обнаруживает вращение заводной головки в SpriteKit

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


person cronenberg    schedule 14.06.2016    source источник


Ответы (2)


Чтобы получить эти вызовы 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:) вы можете получить доступ к сцене через этот выход и установить ее в качестве делегата короны. .)

person rickster    schedule 15.06.2016

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

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

Затем прочитайте значение, реализуя:

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

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

person Rivera    schedule 28.09.2016