Advertisement
  1. Code
  2. iOS SDK

watchOS 2: El Poder de las Animaciones

Scroll to top
Read Time: 9 min

Spanish (Español) translation by Javier Salesi (you can also view the original English article)

El nuevo sistema operativo para el Apple Watch, watchOS 2, fue introducido hace un par de semanas en WWDC 2015. Trae muchas mejoras, principalmente para desarrolladores que buscan crear una aplicación para el Apple Watch. Éstas son las cosas que considero las más importantes para los desarrolladores:

  • Las aplicaciones WatchKit están ahora ejecutándose nativamente en el reloj. Ésto trae la muy necesaria mejora en velocidad, resultando en una mejor experiencia del usuario.
  • El nuevo framework Watch Connectivity permite toda clase de comunicación y compartición de datos entre la aplicación padre iOS y la aplicación watchOS.
  • Las aplicaciones watchOS 2 tienen acceso a datos del hardware, tales como datos del sensor de movimiento, grabación de audio, y aún pueden accesar a los datos de la frecuencia cardiaca.
  • watchOS 2 también introdujo animaciones. En watchOS 1, la única opción para ejecutar una animación era generar una serie de imágenes y luego iterar a través de ellas. watch OS2 trae animaciones verdaderas al Apple Watch. Puedes animar la interfaz de usuario al cambiar las propiedades del layout o maquetado dentro de un bloque de animación. Aquí es donde entra en escena éste tutorial.

1. ¿Por qué deben importarnos las animaciones?

Antes de entrar en materia, me gustaría pasar un minuto hablando sobre el propósito de las animaciones en las aplicaciones Apple Watch.

La razón obvia es que hacen más disfrutable la interfaz de usuario si se usan adecuadamente. Y cuando se trata de Apple Watch, se enfatiza la condición si. Ya que la mayoría de las interacciones de aplicaciones solo duran unos cuantos segundos, realmente no quisieras exagerar las animaciones.

La segunda, y creo la razón más importante, es que permiten jerarquías de navegación personalizadas dentro de las aplicaciones Apple Watch. Supongamos que necesitas presentar una pantalla que el usuario solo puede abandonar al realizar una acción específica. Normalmente, las aplicaciones Apple Watch siempre tienen un botón para cancelar en la esquina superior izquierda cuando se presenta un controlador de interfaz modal. Con las animaciones y una inteligente manipulación del maquetado, pudieras crear tu propia rutina "presentar controlador de vista" que muestre el contenido de la aplicación a pantalla completa, desechándola por esa acción específica. Esa es una de las cosas que aprenderás en éste tutorial.

2. Requisitos Previos

Antes de entrar de lleno en éste tutorial, deberías tener un conocimiento básico de cómo funciona el sistema de maquetado en Watchkit. Aún si eres un desarrollador en iOS experimentado, el maquetado basado en grupo en Watchkit es muy diferente de lo que estás acostumbrado en iOS. Necesitas pensar en el maquetado de una forma muy diferente. Pero una vez que te acostumbres a él, podrás crear la mayoría de los maquetados sin mucho esfuerzo.

Si eres nuevo en maquetar para Watchkit, hay un magnífico tutorial en Tuts+ escrito por mi amigo Patrick Balestra, Entendiendo el sistema de Maquetado de Wathckit. Usando una aplicación de ejemplo, explica todo lo que necesitas saber para aprender a trabajar rápidamente.

También, hay muchas sesiones de WWDC que abordan éste tema. La sesión que más recomiendo y que cubre las animaciones Watchkit es éste titulado Técnicas de Maquetado y Animación para WatchKit.

3. Bases

El principio de animaciones en watchOS 2 es sencillo, estableces una o más de las propiedades animables dentro de un bloque de animación. El siguiente ejemplo ilustra cómo funciona ésto.

1
[self animateWithDuration:0.5 animations:^{
2
    [self.circleGroup setHorizontalAlignment:WKInterfaceObjectHorizontalAlignmentRight];
3
}];

Éste método causa que se alinee circleGroup a la derecha, con una animación con una duración de 0.5 segundos. Como puedes ver, estamos llamando a animateWithDuration:animations: en self, que es una instancia de WKInterfaceController. Ésto es diferente de iOS donde los métodos de animación son métodos de clase en UIView.

La lista de abajo muestra que propiedades son animables:

  • opacidad
  • alineación
  • anchura y altura
  • color de fondo
  • color y matiz de color

Ten en cuenta que aún no es posible en watchOS 2 crear elementos de interface de usuario en un entorno de ejecución. Pero ya que puedes ocultar o establecer su alpha en 0 en el storyboard, ésto no debería ser un gran problema.

Eso es todo. Armado con tu conocimiento sobre el sistema de maquetado de Watchkit, ahora estás preparado para comenzar a trabajar con animaciones nativas en watchOS. Comencemos por crear una aplicacion muestra para que pueda enseñarte un par de ejemplos de cómo todo ésto encaja perfectamente.

4. Animaciones Básicas

Vamos a crear una simple aplicación watchOS 2 en la que introduciremos un par de éstos conceptos de animación. No es ni mucho menos un intento de proporcionar una visión general de todas las cosas que son posibles. Más bien, muestra la idea básica, la cual espero te permita generar soluciones a lo que necesites.

Paso 1: Crear el Proyecto

En el momento de escribir éste artículo, Xcode 7 está aún en fase beta. Para crear una aplicación watchOS 2, necesitas usar Xcode 7 pues es lo que yo voy a utilizar.

  • Lanza Xcode y selecciona File > New > Project...
  • Elige iOS Application con la plantilla Single View Application y da click en Next.
  • Cuando se te pida por nombre del producto Product Name, ingresa WatchAnimations. Puedes desmarcar Include Unit Tests e Include UI Tests pues no los necesitaremos para éste tutorial.
WatchAnimations - Creating new projectWatchAnimations - Creating new projectWatchAnimations - Creating new project
  • Da click en Next, elige una ubicación para guardar el proyecto, y da click en Create.

Paso 2: Agrega WatchKit Target

  • En Xcode, selecciona File > New > Target...
  • De la lista de plantillas, elige WatchKit App de la sección watchOS > Application y da click en Next para continuar.
WatchAnimations - Adding WatchKit targetWatchAnimations - Adding WatchKit targetWatchAnimations - Adding WatchKit target
  • Para Product name, puedes elegir lo que gustes. He nombrado la mía WatchApp.
  • Desmarca Include Notification Scene, porque no la necesitaremos. Cuando des click en Finish, tu WatchKit target será creado.
Adding a targetAdding a targetAdding a target
  • Cuando se te pregunte si activar el esquema WatchApp, da click en Activate. Solo nota que puedes cambiar el esquema en cualquier momento en la parte superior izquierda de tu ventana de Xcode.
WatchAnimations - Activating Watch build schemeWatchAnimations - Activating Watch build schemeWatchAnimations - Activating Watch build scheme

Paso 3: Crea la Interfaz de Usuario

Abre Interface.storyboard en el grupo WatchApp como se muestra abajo.

WatchAnimations - empty interfaceWatchAnimations - empty interfaceWatchAnimations - empty interface

Agrega un grupo a la interfaz arrastrándolo desde Object Library a la derecha. En el Attributes Inspector a la derecha, cambia su maquetado a Vertical y establece su altura en Relative to Container.

WatchAnimations - Interface - first stepWatchAnimations - Interface - first stepWatchAnimations - Interface - first step

Agrega un segundo grupo al grupo que acabas de añadir. En el Attributes Inspector, establece su posición vertical en Bottom.

Agrega cuatro botones al segundo grupo. Para cada botón, establece el Size a Relative to Container con un valor de 0.25. Establece los títulos de los botones a ←, →, ↑ y ↓. Después de éste paso, la interfaz de usuario se debería ver así:

WatchAnimations - Interface - second stepWatchAnimations - Interface - second stepWatchAnimations - Interface - second step

Para finalizar la primera parte de la interfaz de usuario, agrega un grupo más al grupo principal y configúralo como sigue:

  • Para tenerlo más claro, establece su nombre en Circle cambiando su nombre en el Document Outline a la izquierda.
  • Establece su color en rojo.
  • Establece su radio en 20 puntos.
  • Establece su tamaño, anchura y altura en 40 puntos.
  • La siguiente captura de pantalla muestra cómo el círculo debe ser configurado.

    WatchAnimations - User Interface - third stepWatchAnimations - User Interface - third stepWatchAnimations - User Interface - third step

    Paso 4: Agregar Animaciones

    En el Project navigator, expande el grupo WatchApp Extension y selecciona InterfaceController.m. Remplaza la implementación de la clase InterfaceController con lo siguiente:

    1
    #import "InterfaceController.h"
    
    
    2
    3
    @interface InterfaceController()
    
    4
    5
    @property (nonatomic, weak) IBOutlet WKInterfaceGroup *circleGroup;
    
    6
    7
    @end
    
    8
    9
    @implementation InterfaceController
    
    10
    11
    // Circle Direction buttons
    
    
    12
    13
    - (IBAction)leftButtonPressed {
    
    14
        [self animateWithDuration:0.5 animations:^{
    
    15
            [self.circleGroup setHorizontalAlignment:WKInterfaceObjectHorizontalAlignmentLeft];
    
    16
        }];
    
    17
    }
    
    18
    19
    - (IBAction)rightButtonPressed {
    
    20
        [self animateWithDuration:0.5 animations:^{
    
    21
            [self.circleGroup setHorizontalAlignment:WKInterfaceObjectHorizontalAlignmentRight];
    
    22
        }];
    
    23
    }
    
    24
    25
    - (IBAction)upButtonPressed {
    
    26
        [self animateWithDuration:0.5 animations:^{
    
    27
            [self.circleGroup setVerticalAlignment:WKInterfaceObjectVerticalAlignmentTop];
    
    28
        }];
    
    29
    }
    
    30
    31
    - (IBAction)downButtonPressed {
    
    32
        [self animateWithDuration:0.5 animations:^{
    
    33
            [self.circleGroup setVerticalAlignment:WKInterfaceObjectVerticalAlignmentBottom];
    
    34
        }];
    
    35
    }
    
    36
    37
    @end
    

    Éstas acciones moverán el círculo rojo en una dirección específica. Y como puedes ver, logramos eso al ajustar su alineación vertical y/o horizontal dentro de un bloque de animación.

    Paso 5: Conectar los Outlets

    Abre Interface.storyboard y conecta los outlets como se muestra abajo.

    WatchAnimations - Interface - connecting outletsWatchAnimations - Interface - connecting outletsWatchAnimations - Interface - connecting outlets

    Eso debería hacerlo. Ejecuta el proyecto, y si has seguido los pasos, deberías poder mover el círculo rojo alrededor de la pantalla usando los botones de flechas.

    WatchAnimations - demo 1

    5. Animaciones Más Complejas

    En la segunda parte de éste tutorial, crearemos una animación para empujar. Ya que la mayoría de los pasos necesarios son similares, iré un poco más rápido ésta vez.

    Paso 1: Crear la Animación

    Abre InterfaceController.m y crea un nuevo outlet, firstScreenGroup, de tipo WKIterfaceGroup en la extensión de clase de la clase InterfaceController.

    1
    @interface InterfaceController()
    
    2
    3
    @property (nonatomic, weak) IBOutlet WKInterfaceGroup *circleGroup;
    
    4
    @property (nonatomic, weak) IBOutlet WKInterfaceGroup *firstScreenGroup;
    
    5
    6
    @end
    

    Posteriormente, implementa las siguientes acciones en la clase InterfaceController.

    1
    - (IBAction)pushButtonPressed {
    
    2
        [self animateWithDuration:0.1 animations:^{
    
    3
            [self.firstScreenGroup setAlpha:0];
    
    4
        }];
    
    5
        
    
    6
        [self animateWithDuration:0.3 animations:^{
    
    7
            [self.firstScreenGroup setWidth:0];
    
    8
        }];
    
    9
    }
    
    10
    11
    - (IBAction)popButtonPressed {
    
    12
        [self animateWithDuration:0.3 animations:^{
    
    13
            [self.firstScreenGroup setRelativeWidth:1 withAdjustment:0];
    
    14
        }];
    
    15
        
    
    16
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    
    17
            [self animateWithDuration:0.1 animations:^{
    
    18
                [self.firstScreenGroup setAlpha:1];
    
    19
            }];
    
    20
        });
    
    21
    }
    

    En pushButtonPressed, achicamos el primer grupo de la pantalla (lo crearemos en el próximo paso) y en popButtonPressed expandimos de nuevo ese grupo. También vamos a animar el alpha del primer grupo de la pantalla para hacer la animación un poco más atractiva.

    Paso 2: Extender la Interfaz de Usuario

    Abre Interface.storyboard y agrega un nuevo grupo a la interfaz de usuario. Pon el grupo que ya estaba ahí, el que contiene Circle y el grupo con los botones, dentro del nuevo grupo. Establece su Layout en Horizontal y renombre el grupo contenido a First screen. Ésto será útil posteriormente. El resultado debería verse así:

    WatchAnimations - Interface - second partWatchAnimations - Interface - second partWatchAnimations - Interface - second part

    Después, agrega un segundo grupo que estará en el mismo nivel que el grupo First screen. Establece su Layout en Vertical. Agrega una imagen y un botón al grupo. Puedes agregar literalmente cualquier imagen, solo asegúrate de poner algo ahí porque de otra manera la animación se vería un poco simple. Establece el título del botón en "< Pop". Conecta el botón a la acción popButtonPressed que creamos previamente. La interfaz de usuario ahora debería verse así:

    WatchAnimations - Interface - second part step 2WatchAnimations - Interface - second part step 2WatchAnimations - Interface - second part step 2

    Añade un botón al grupo First screen. Establece su título en "Push >" y su posición vertical en Bottom. Conecta el botón a la acción pushButtonPressed. La interfaz de usuario ahora debería verse así:

    WatchAnimations - Interface - second part step 3WatchAnimations - Interface - second part step 3WatchAnimations - Interface - second part step 3

    Necesitamos hacer una cosa más, conectar el outlet firstScreenGroup al grupo que llamamos First screen.

    WatchAnimations - Interface - second part step 4WatchAnimations - Interface - second part step 4WatchAnimations - Interface - second part step 4

    Paso 3: Compilar y Ejecutar

    Cuando ejecutas y compilas la aplicación, deberías poder presentar la segunda pantalla al presionar el botón con el título "Push >" en la parte inferior. Puedes desestimar la segunda pantalla al presionar el botón con el título "< Pop". Debería verse así:

    WatchAnimations - demo 2

    Conclusión

    En éste tutorial, hemos dado un vistazo a las animaciones nativas en watchOS 2. Espero haberte dado una idea de lo que puedes lograr con animaciones en watchOS. Si tienes alguna pregunta, puedes publicar un comentario abajo o pueden contactarme en Twitter.

    ¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

    Advertisement
    Did you find this post useful?
    Want a weekly email summary?
    Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
    Advertisement
    Looking for something to help kick start your next project?
    Envato Market has a range of items for sale to help get you started.