2014-11-22 17 views
23

Sono molto entusiasta delle nuove possibilità di interazione degli utenti introdotte da Apple Watch, tra cui Force Touch e Digital Crown.API WatchKit per Force Touch/Digital Crown?

Tuttavia, non sono riuscito a trovarne menzioni nell'API WatchKit. Ci sono modi per ricevere eventi da Force Touch/Digital Crown? È possibile avere gestori personalizzati per gli eventi?

+3

Forza tocco mostra semplicemente le voci di menu, che si aggiungono con addMenuItem. .. su WKInterfaceControllers. Non è stata inoltrata alcuna azione per i tocchi di forza. Lo stesso con la corona digitale. – mattyohe

risposta

10

watchOS 3 aggiunge WKCrownSequencer e WKCrownDelegate per segnalare lo stato della corona digitale (come la velocità di rotazione), nonché per ricevere notifiche quando l'utente ruota la corona.

È possibile utilizzare il sequenziatore di corona per fornire un input generale per controllare scene o oggetti di interfaccia.

Apple ha aggiornato il suo WatchKit Catalog sample code per includere un esempio WKInterfaceController corona sequencer che illustra come utilizzare la corona digitale Apple Osservare di interagire con altri oggetti:

class CrownDetailController: WKInterfaceController, WKCrownDelegate { 
    @IBOutlet var velocityLabel: WKInterfaceLabel! 
    @IBOutlet var stateLabel: WKInterfaceLabel! 
    @IBOutlet var pickerView: WKInterfacePicker! 

    override func awake(withContext context: AnyObject?) { 
     super.awake(withContext: context) 

     let itemList: [(String, String)] = [ 
      ("Item 1", "Red"), 
      ("Item 2", "Green"), 
      ("Item 3", "Blue") 
     ] 
     let pickerItems: [WKPickerItem] = itemList.map { 
      let pickerItem = WKPickerItem() 
      pickerItem.caption = $0.0 
      pickerItem.title = $0.1 
      return pickerItem 
     } 
     pickerView.setItems(pickerItems) 

     crownSequencer.delegate = self 
    } 

    override func willActivate() { 
     // This method is called when watch view controller is about to be visible to user 
     super.willActivate() 
     crownSequencer.focus() 
    } 

    @IBAction func focusCrown(sender: AnyObject) { 
     crownSequencer.focus() 
    } 

    func updateCrownLabels() { 
     velocityLabel.setText(String(format: "RPS: %2.2lf", crownSequencer.rotationsPerSecond)) 
     stateLabel.setText(crownSequencer.isIdle ? "Idle: true" : "Idle: false") 
    } 

    func crownDidBecomeIdle(_ crownSequencer: WKCrownSequencer?) { 
     updateCrownLabels() 
    } 

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

} 
10

Al momento non esiste alcuna possibilità per i gestori di eventi personalizzati per entrambi i metodi di input. I dipendenti Apple sui forum degli sviluppatori hanno suggerito di inviare una richiesta di funzionalità. Sospetto che avremo accesso all'API Digital Crown non appena avremo la possibilità di iniziare a creare app native Apple Watch il prossimo anno. Al momento rimane una limitazione significativa per l'immissione dei dati.

12

Attualmente (Xcode 6.2 beta 3) Apple ha indicato che la corona digitale scorrerà il contenuto della pagina su e giù in app di terze parti, ma le app non possono registrarsi per ricevere notifiche da esso o per usarlo come dispositivo di input. Sembra molto probabile che ciò sia dovuto a preoccupazioni relative alla latenza che porta alla mancata reattività o alla durata della batteria, dato che il codice di terze parti è in esecuzione esclusivamente nell'estensione per app WatchKit sull'iPhone e quindi questi eventi dovrebbero essere inviati in modalità wireless ritorna al telefono.

È possibile utilizzare Force Touch come metodo di immissione in app di terze parti. A questo punto, credo che l'unico uso che Apple ha consigliato per force touch in qualsiasi applicazione è quello di visualizzare un menu contestuale, e gli sviluppatori di terze parti hanno pieno accesso a questo. Non è necessario registrarsi per ricevere un evento force touch. È sufficiente creare un menu nel generatore di interfacce, aggiungere voci di menu e quindi collegare tali voci di menu a IBActions nell'estensione WatchKit. È piuttosto strano non dover collegare il menu a qualcosa di equivalente a un riconoscitore di forza touch, ma quando lo provi, troverai che funziona. Potrebbe anche essere che questo continuerà ad essere l'unico accesso che gli sviluppatori di terze parti devono forzare al tatto, anche dopo aver avuto la possibilità di creare app native per Watch nel 2015.

Apple ha comunque incoraggiato gli sviluppatori a presentare miglioramenti richieste al numero http://bugreporter.apple.com quindi sarebbe una buona idea farlo e chiedere l'accesso a queste API come molti di noi hanno già.

7

In watchOS 2, (incluso in Xcode 7 beta) Apple ha aggiunto WKInterfacePicker per consentire la registrazione di un delegato e la risposta alle modifiche della corona digitale. Puoi consultare i documenti here.

4

In watchos 2 per utilizzare la corona digitale per selezionare un elemento in un WKInterfacePicker:

Nel estensione orologio app InterfaceController.h

@property (strong, nonatomic) IBOutlet WKInterfacePicker *TestSelector; 
@property (strong, nonatomic) NSArray *TestsArray; 

Nel estensione orologio app InterfaceController.m

// Setup two items the user can select from in picker 
WKPickerItem *pickerItem1 = [WKPickerItem alloc]; 
[pickerItem1 setTitle:@"First item in list"]; 

WKPickerItem *pickerItem2 = [WKPickerItem alloc]; 
[pickerItem2 setTitle:@"Second item in list"]; 

// Add items to array that will be used to set picker list 
self.TestsArray = [[NSArray alloc ] initWithObjects:pickerItem1,pickerItem2, nil]; 
// Set list of items as choices in the picker list 
[TestSelector setItems:self.TestsArray]; 

Nel builder dell'interfaccia, collegare l'elemento dell'interfaccia utente del selettore a TestSelector come uscita di riferimento