watchOS 2 The Power of Animations

Il nuovo sistema operativo per Apple Watch, watchOS 2, è stato presentato un paio di settimane fa al WWDC 2015. Offre molti miglioramenti, soprattutto per gli sviluppatori che desiderano creare un'app Apple Watch. Queste sono le cose che trovo più importanti per gli sviluppatori:

  • Le app WatchKit sono ora in esecuzione in modo nativo sull'orologio. Questo porta il tanto necessario miglioramento della velocità, con il risultato di una migliore esperienza utente.
  • Il nuovo Guarda la connettività framework consente tutti i tipi di comunicazione e condivisione dei dati tra l'app iOS principale e l'app watchOS.
  • Le app watchOS 2 hanno accesso ai dati hardware, come i dati dal sensore di movimento, la registrazione audio e possono persino accedere ai dati della frequenza cardiaca.
  • watchOS 2 ha anche introdotto animazioni. Su watchOS 1, l'unica opzione per eseguire un'animazione consisteva nel generare una serie di immagini e quindi scorrere attraverso di esse. watchOS 2 porta vere animazioni all'Apple Watch. È possibile animare l'interfaccia utente modificando le proprietà del layout all'interno di un blocco di animazione. Ecco dove arriva questo tutorial.

1. Perché preoccuparsi delle animazioni?

Prima di arrivare ai dadi, vorrei passare un minuto a parlare dello scopo delle animazioni sulle app di Apple Watch.

La ragione ovvia è che rendono l'interfaccia utente più divertente se utilizzata in modo appropriato. E quando si tratta di Apple Watch, questo è un grande Se. Poiché la maggior parte delle interazioni con le app dura solo pochi secondi, non vuoi davvero esagerare con le animazioni.

Il secondo, e credo sia un motivo più importante, è che consentono gerarchie di navigazione personalizzate all'interno delle app di Apple Watch. Supponiamo che tu debba presentare una schermata che l'utente può lasciare solo eseguendo un'azione specifica. Normalmente, le app di Apple Watch hanno sempre un pulsante di annullamento nell'angolo in alto a sinistra quando viene presentato un controller di interfaccia modale. Con le animazioni e la manipolazione intelligente del layout, è possibile creare la propria routine "presente controller di visualizzazione" che mostra il contenuto della tua app a schermo intero, ignorandolo con quella specifica azione. Questa è una delle cose che imparerai in questo tutorial.

2. Prerequisiti

Prima di approfondire questo tutorial, dovresti avere una conoscenza di base di come funziona il sistema di layout su WatchKit. Anche se sei uno sviluppatore iOS esperto, il layout basato su gruppi in WatchKit è molto diverso da quello a cui sei abituato su iOS. Devi pensare al layout in un modo molto diverso. Ma una volta che ti ci abitui, sarai in grado di creare la maggior parte dei layout senza troppi sforzi.

Se sei nuovo sul layout di WatchKit, c'è un ottimo tutorial su Tuts + del mio amico Patrick Balestra, Comprensione del sistema di layout di WatchKit. Usando un'app di esempio, spiega tutto ciò che è necessario sapere per essere al passo.

Inoltre, ci sono molte sessioni WWDC che toccano questo argomento. La sessione che consiglio di più e che riguarda le animazioni di WatchKit è questa intitolata Tecniche di layout e animazione per WatchKit.

3. Nozioni di base

Il principio delle animazioni su watchOS 2 è semplice, è possibile impostare una o più proprietà animabili all'interno di un blocco di animazione. Il seguente esempio illustra come funziona.

[auto animateWithDuration: 0.5 animazioni: ^ [self.circleGroup setHorizontalAlignment: WKInterfaceObjectHorizontalAlignmentRight]; ];

Questo metodo causa il circleGroup da allineare a destra, con un'animazione della durata di 0,5 secondi. Come puoi vedere, stiamo chiamando animateWithDuration: animazioni: sopra se stesso, che è un'istanza di WKInterfaceController. Questo è diverso da iOS in cui i metodi di animazione sono metodi di classe UIView.

L'elenco seguente mostra quali proprietà sono animabili:

  • opacità
  • allineamento
  • larghezza e altezza
  • colore di sfondo
  • colore e colore della tinta

Tenere presente che non è ancora possibile su watchOS 2 creare elementi dell'interfaccia utente in fase di runtime. Ma dal momento che puoi nasconderli o impostare il loro alfa su 0 nello storyboard, questo non dovrebbe essere un grosso problema.

Questo è tutto. Con la tua conoscenza del sistema di layout WatchKit, sei pronto per iniziare a lavorare con animazioni native su watchOS. Iniziamo con la creazione di un'app campione in modo da poterti mostrare un paio di esempi di come tutto ciò si adatta a tutti.

4. Animazioni di base

Creeremo una semplice app watchOS 2 che introdurrà un paio di questi concetti di animazione. Non è affatto il tentativo di fornire una panoramica completa di tutte le cose che sono possibili. Invece, mostra l'idea di base, che si spera ti consenta di trovare soluzioni a ciò di cui hai bisogno.

Passaggio 1: crea il progetto

Al momento della scrittura, Xcode 7 è ancora in beta. Per creare un'app watchOS 2, devi usare Xcode 7 in modo che sia quello che userò.

  • Avvia Xcode e seleziona File> Nuovo> Progetto ... .
  • Scegliere Applicazione iOS con Applicazione vista singola modello e clicca Il prossimo.
  • Quando richiesto nome del prodotto, accedere WatchAnimations. Puoi deselezionare Includi test unitarie Includi test dell'interfaccia utente come non avremo bisogno di quelli per questo tutorial.
  • Clic Il prossimo, scegliere una posizione per salvare il progetto e fare clic Creare.

Passaggio 2: Aggiungi target WatchKit

  • In Xcode, selezionare File> Nuovo> Target ... .
  • Dall'elenco di modelli, scegliere App WatchKit dal watchos> Applicazioni sezione e clicca Il prossimo continuare.
  • Per Nome del prodotto, puoi scegliere qualsiasi cosa tu voglia. Ho chiamato il mio WatchApp.
  • Deseleziona Includi la scena di notifica, perché non ne avremo bisogno Quando si fa clic finire, il tuo target WatchKit verrà creato.
  • Quando viene richiesto di attivare lo schema WatchApp, fare clic su Attivare. Tieni presente che puoi modificare lo schema in qualsiasi momento nella parte superiore sinistra della finestra Xcode.

Passaggio 3: creare l'interfaccia utente

Aperto Interface.storyboard nel WatchApp gruppo come mostrato di seguito.


Aggiungi un gruppo all'interfaccia trascinandolo dal Libreria di oggetti sulla destra. Nel Ispettore degli attributi a destra, cambia il suo layout in Verticale e impostare la sua altezza a Relativo al contenitore.


Aggiungi un secondo gruppo al gruppo che abbiamo appena aggiunto. Nel Ispettore degli attributi, imposta la sua posizione verticale a Parte inferiore.

Aggiungi quattro pulsanti al secondo gruppo. Per ogni pulsante, impostare TagliaRelativo al contenitore con un valore di 0.25. Imposta i titoli dei pulsanti su ←, →, ↑ e ↓. Dopo questo passaggio, l'interfaccia utente dovrebbe assomigliare a questa:


Per completare la prima parte dell'interfaccia utente, aggiungi un altro gruppo al gruppo principale e configuralo come segue:

  • Per chiarezza, impostare il suo nome su Cerchio cambiando il suo nome nel Struttura del documento sulla sinistra.
  • Imposta il suo colore sul rosso.
  • Imposta il raggio su 20 punti.
  • Imposta le sue dimensioni, larghezza e altezza, a 40 punti.
  • La seguente schermata mostra come deve essere configurato il cerchio.


    Passaggio 4: aggiungere animazioni

    Nel Navigatore di progetto, espandere il Estensione WatchApp raggruppa e seleziona InterfaceController.m. Sostituire l'implementazione del InterfaceController classe con il seguente:

    #import "InterfaceController.h" @interface InterfaceController () @property (nonatomic, weak) IBOutlet WKInterfaceGroup * circleGroup; @end @implementation InterfaceController // Pulsanti Circle Direction - (IBAction) leftButtonPressed [self animateWithDuration: 0.5 animations: ^ [self.circleGroup setHorizontalAlignment: WKInterfaceObjectHorizontalAlignmentLeft]; ];  - (IBAction) rightButtonPressed [self animateWithDuration: 0.5 animations: ^ [self.circleGroup setHorizontalAlignment: WKInterfaceObjectHorizontalAlignmentRight]; ];  - (IBAction) upButtonPressed [self animateWithDuration: 0.5 animations: ^ [self.circleGroup setVerticalAlignment: WKInterfaceObjectVerticalAlignmentTop]; ];  - (IBAction) downButtonPressed [self animateWithDuration: 0.5 animazioni: ^ [self.circleGroup setVerticalAlignment: WKInterfaceObjectVerticalAlignmentBottom]; ];  @fine

    Queste azioni sposteranno il cerchio rosso in una direzione specifica. E come puoi vedere, lo realizziamo impostando il suo allineamento verticale e / o orizzontale all'interno di un blocco di animazione.

    Passaggio 5: collegare le prese

    Aperto Interface.storyboard e collegare le prese come mostrato di seguito.


    Questo dovrebbe farlo. Esegui il progetto e, se hai seguito i passaggi precedenti, dovresti essere in grado di spostare il cerchio rosso sullo schermo usando i pulsanti freccia.

    5. Animazioni più complesse

    Nella seconda parte di questo tutorial, creeremo un'animazione push. Poiché la maggior parte dei passaggi coinvolti sono simili, questa volta mi muoverò un po 'più veloce.

    Passaggio 1: crea animazione

    Aperto InterfaceController.m e creare un nuovo sbocco, firstScreenGroup, di tipo WKInterfaceGroup nell'estensione di classe del InterfaceController classe.

    @interface InterfaceController () @property (nonatomic, weak) IBOutlet WKInterfaceGroup * circleGroup; @property (nonatomic, weak) IBOutlet WKInterfaceGroup * firstScreenGroup; @fine

    Quindi, implementare le seguenti azioni in InterfaceController classe.

    - (IBAction) pushButtonPressed [self animateWithDuration: 0.1 animations: ^ [self.firstScreenGroup setAlpha: 0]; ]; [auto animateWithDuration: 0.3 animazioni: ^ [self.firstScreenGroup setWidth: 0]; ];  - (IBAction) popButtonPressed [self animateWithDuration: 0.3 animazioni: ^ [self.firstScreenGroup setRelativeWidth: 1 withAdjustment: 0]; ]; dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t) (0.2 * NSEC_PER_SEC)), dispatch_get_main_queue (), ^ [self animateWithDuration: 0.1 animazioni: ^ [self.firstScreenGroup setAlpha: 1];];); 

    Nel pushButtonPressed, riduciamo il primo gruppo di schermate (lo creeremo nel passaggio successivo) e in popButtonPressed espandiamo nuovamente quel gruppo. Stiamo anche animando l'alfa del primo gruppo di schermate per rendere l'animazione un po 'più attraente.

    Passaggio 2: estendere l'interfaccia utente

    Aperto Interface.storyboard e aggiungi un nuovo gruppo all'interfaccia utente. Metti il ​​gruppo che era già lì, quello contenente Cerchio e il gruppo con i pulsanti, all'interno di quel nuovo gruppo. Imposta la sua disposizione a Orizzontale e rinominare il gruppo contenuto in Primo schermo. Questo tornerà utile più tardi. Il risultato dovrebbe essere simile a questo:


    Quindi, aggiungi un secondo gruppo che si troverà allo stesso livello di Primo schermo gruppo. Imposta la sua disposizione a Verticale. Aggiungi un'immagine e un pulsante al gruppo. Puoi aggiungere letteralmente qualsiasi immagine, assicurati di mettere qualcosa lì, altrimenti l'animazione sembrerebbe un po 'asciutta. Imposta il titolo del pulsante su "< Pop". Connect the button to the popButtonPressed azione che abbiamo creato in precedenza. L'interfaccia utente dovrebbe ora assomigliare a questa:


    Aggiungi un pulsante al Primo schermo gruppo. Imposta il titolo su "Push>" e la sua posizione verticale su Parte inferiore. Collegare il pulsante al pushButtonPressed azione. L'interfaccia utente dovrebbe ora assomigliare a questa:


    C'è una cosa che dobbiamo fare, connettere il firstScreenGroup sbocco al gruppo che abbiamo chiamato Primo schermo.

    Passaggio 3: costruisci ed esegui

    Quando crei ed esegui l'app, dovresti essere in grado di presentare il secondo schermo toccando il pulsante con il titolo "Push>" in basso. Puoi chiudere il secondo schermo toccando il pulsante con il titolo "< Pop". It should look like this:

    Conclusione

    In questo tutorial, abbiamo dato un'occhiata alle animazioni native su watchOS 2. Spero che ti abbia dato un assaggio di ciò che puoi ottenere con le animazioni su watchOS. Se hai domande, puoi postare un commento qui sotto o contattarmi su Twitter.