2017-09-24 8 views
0

J'ai une application watchkit qui fait usage de la couronne numérique en mettantComment mettre la Couronne numérique de retour au travail avec watchos 4

crownSequencer.delegate = self 
crownSequencer.focus() 

Dans la méthode veille de mon contrôleur d'interface qui est mise en œuvre:

class InterfaceController: WKInterfaceController, WKCrownDelegate 

Dans watchos 3 ma méthode délégué a été exécuté très bien:

// called when the crown rotates, rotationalDelta is the change since the last call (sign indicates direction). 
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) { 

    // do something important here... 
} 

Après la mise à niveau watchos4, cette fonctionnalité casse. Une simple recompilation et conversion en swift 4 n'a pas aidé.

Répondre

2

je pouvais résoudre ce problème en déplaçant simplement le code crownSequencer la méthode willActivate de mon contrôleur d'interface:

override func willActivate() { 
    ... 

    crownSequencer.delegate = self 
    crownSequencer.focus() 
} 

Il me semble que quelque chose vole l'accent dans watchos 4 (peut-être quelque chose lié à la spritekit J'utilise?) Si vous définissez le focus trop tôt.

Espérons que cela économise du temps pour quelqu'un d'autre!

+0

Une idée de la façon de reproduire le problème? Mon application fonctionne 90% du temps, puis quelque part sur la piste lorsque l'application démarre, elle cesse de détecter la rotation de la couronne. Je veux systématiquement le répliquer avant de mettre un correctif, donc je sais que c'est corrigé. Vous vous demandez quel est le déclencheur. Je me demandais aussi si didAppear serait un meilleur endroit. Actuellement, je l'ai en éveil(). – TPot

+0

Oui - didAppear est certainement mieux, puisque willAppear n'est pas appelé alle l'heure. Mais même là, je remarque la même chose que vous avez décrit: Dans 10%, il cesse toujours de fonctionner: - / – Dirk