Home » Análisis » Novedades en iOS 10 de Cocoa Touch y UIKit (II)
iOS 10 Cover

Novedades en iOS 10 de Cocoa Touch y UIKit (II)

Seguimos con nuestro resumen semanal de las novedades de iOS 10 en lo que a desarrollo de apps se refiere: al uso de UIKit o Cocoa Touch. El pasado jueves revisamos algunos interesantes aspectos de iOS 10 como Swift 3 en UIKit, UIPasteBoard (para la nueva función de portapapeles universal), la gestión del color, el renderizado de imágenes en una nueva API mucho más potente o las novedades en la gestión de assets. Podéis leerlo pulsando aquí.

Y ahora seguimos con elementos nuevos incorporados que llevarán nuestras apps a nuevos niveles.

SFSpeechRecognizer

Hasta ahora, sabíamos que iOS disponía de un sintetizador de voz multi-idioma (el mismo de Voice Over) que podíamos usar en nuestra app. Bastaba usar la API AVSpeechSynthesizer definiendo una voz, un contenido y uniendo ambos en una instancia. Pero ahora en iOS 10 tenemos algo mucho más potente si cabe: el reconocimiento vocal multi-idioma.

Una API que puede transcribir a texto tanto ficheros de audio ya grabados como el propio buffer de sonido en tiempo real, por lo que podremos usarlo en todos las opciones posibles. Un motor que, al igual que Siri, es de reconocimiento de habla continua. Además, está optimizado para dictado libre.

El resultado de la transcripción de un fichero, sin importar el idioma, se nos devuelve en una cadena en lo que la propia propiedad de la clase llama la mejor transcripción.

Texto predictivo

Otra de las importantes mejoras de iOS 10 es la posibilidad de incorporar etiquetas semánticas en los campos de texto, vista de texto (text views) o incluso en vista de contenido web. De esta forma, podemos incorporar nuestro propio contenido como sugerencia de escritura en el teclado predictivo, basado en el contenido que manejemos en la app.

También podemos elegir el tipo de contenido que los campos han de tener, más de allá de texto, para que el sistema pueda sugerir de forma inteligente el predictivo que considere más adecuado. Podemos configurar los campos, con una nueva propiedad llamada textContentType y decirle que use datos de persona (provenientes de un contacto), localizaciones (incluyendo varios modos de datos como abreviado o completo), email, teléfonos, números de tarjeta de crédito…

Tipos dinámicos

En iOS 10 ha habido un cambio muy importante en cuanto a las categorías en las clases de contenido y cómo se manejan, que da lugar a una funcionalidad automática que se extiende por todo el sistema.

En iOS 9 teníamos una serie de variables predefinidas que nos ayudaban a usar, en vez de un tamaño fijo de texto que luego pudiera cambiar entre dispositivos, a usar valores del tipo UIContentSizeCategoryMedium o UIContentSizeCategoryLarge lo que nos devolvía un tipo adaptado al tamaño de texto que en accesibilidad el usuario pudiera haber escogido y, sobre todo, proporcional.

Estas categorías, que eran propiedades de UIApplication han dejado de serlo para convertirse en características concretas. Y además, ya no necesitaremos estar pendientes de notificaciones que nos indiquen si el usuario ha cambiado este valor y reaccionar redibujando nuestra UI para que se adapte. En iOS 10, estas nuevas características forman parte de UIViewController por lo que podemos usarlas dentro de cualquier extensión que creemos de cualquier tipo de vista.

Si construimos nuestra app usando los elementos nativos del sistema como etiquetas, campos de texto, vistas y demás, el sistema reaccionará automáticamente a cualquier cambio de tamaño en el texto. Basta usar la propiedad adjustsFontForContentSizeCategory y ponerla a true para que el texto se ajuste solo, siempre y cuando tengamos bien integrado el auto-layout.

Elementos de las barras de tabulación

Otra nueva función es la que permite que los objetos UITabBarItem puedan ser más personalizados, así que ahora podremos usar atributos de texto que nos permitan cambiar la fuente o el color de la misma, elegir el color de la insignia o el color con el que se colorearán las opciones de la barra que no están seleccionadas.

De esta forma, podemos cambiar completamente la apariencia de un barra de tabulación, de como la vemos encima de la imagen (el aspecto normal) a la imagen de abajo (el aspecto con el código superior aplicado).

Ejemplo de cambio de aspecto de los UITabBarItem con las nuevas posibilidades de cambio de tipografía o color

Peek & Pop en las Web Views

Los gestos de 3D Touch (que tenéis cómo se integran en nuestro tutorial, aquí) son otra de las cosas que han mejorado en su integración en el sistema. Y uno donde los sitios donde no estaban muy bien integrados era en las vistas web, esas ventanas de navegador que podemos abrir en nuestra app para mostrar contenido online.

Ahora, en iOS 10, tener un mejor control de los comportamientos de los gestos de peek y pop, view controllers personalizados cuando hacemos un peek para controlar qué va a mostrarse y la posibilidad de previsualizar acciones. Gracias a tres nuevos métodos en la delegación, podremos decidir si queremos que el web view haga pop en nuestra app y controlar la acción seleccionada.

UIPreviewInteraction

Sin abandonar el 3D Touch, una de las funciones más interesantes que se han incorporado, es una clase llamada UIPreviewInteraction que permite gestionar el ciclo de las transiciones entre los gestos. De esta forma, podemos obtener a través de una nueva delegación de esta clase, la progresión del gesto peek y personalizar lo que nuestra UI hará mientras se realiza el gesto de peek. Realizar transiciones o animaciones más fluidas o interactivas, que permitan estados intermedios entre el toque y el peek.

Este caso es muy simple a la hora de ilustrar cómo es esta funcionalidad. Cuando el usuario empieza a presionar la pantalla más allá de un toque, se lanza esta delegación que nos envía en la propiedad transitionProgress de tipo flotante, la progresión entre 0.0 y 1.0. De esta forma, podemos saber en qué estado está el peek y llamar a nuestra propia función updateUIToPeek, a la que le pasamos este valor para que actúe y haga una animación o lo que quiera que quisiéramos hacer. Algo que le indique al usuario esa progresión. Cuando el valor Bool de ended devuelve true, entonces sabemos que ya se ha hecho la pulsación completa y mostramos nuestra interfaz de gesto peek.

Ejemplo de UIRefreshControl

Soporte de UIRefreshControl en UIScrollView

Una de las funciones más demandadas por los desarrolladores era la posibilidad de usar el control de refresco en las vistas UIScrollView, lo que Apple ha implementado en iOS 10, con soporte de todas las subclases de este tipo de vista. Esto significa que no solo podrá ser usado en las UITableView, como hasta ahora, si no también en UICollectionView.

De forma que la famosa funcionalidad de “desliza para refrescar” puede ser implementada ahora en más tipos de apps y vistas aparte de la vistas de tabla.

UICollectionView

Y hablando de UICollectionView, en iOS 10 han sufrido un número importante de mejoras. La más importante es la del tamaño del contenido de las celdas. Normalmente había que estimar el tamaño de dichas celdas, fijarlo e informarlo a la hora de crear el lienzo correspondiente. Ahora existe un nuevo modo automático en el flow layout de forma que si lo ponemos, el sistema se encargará de fijar el tamaño de las celdas él solo en función de su contenido.

Otra interesante funcionalidad es la implementación de la paginación en las vistas de colección, de forma que al igual que tenemos esta función para las UIScrollView ahora también podemos usarlas en estas últimas.

Aunque tal vez la funcionalidad más importante en este tipo es la que Apple denomina desplazamiento suavizado (smooth scrolling), una función automática que mejora la experiencia de usuario de este tipo de vistas.

Uno de los problemas más comunes que suelen tener este tipo de vistas es la falta de fluidez cuando navegamos por ellas, porque tal vez al sistema le cuesta bastante dibujar la celda mientras las va a mostrar. Y eso puede causar pérdidas de frames y la sensación del usuario que su sistema no va muy fluido.

Pero el nuevo motor de iOS 10 utilizará ahora una función de precarga de celdas aun no mostradas, que tendrá en memoria y preparadas para mostrar antes que el usuario acceda a ellas. En función del coste que tenga para la CPU la carga de las diferentes celdas, el sistema sabrá cuáles cuestan más o menos o cómo gestionar esa carga para dar una mayor sensación de fluidez y evitar las paradas en el scroll.

Y lo mejor de todo es que no hay que hacer nada para implementarlo, ya que funciona de manera automática con tan solo compilar para iOS 10 nuestra app.

Sin embargo, con el objetivo de mejorarlo aun más, Apple ha incorporado nuevas delegaciones a las vistas de colección, pero esta vez centradas en la precarga de datos en vez del predibujado de la celda. De esta forma, usando los mismos indexPath, el sistema sabrá que cuando tiene que dibujar una celda tiene que recuperar antes los datos de la misma y actuará en consecuencia buscando esta nueva delegación dentro del protocolo de las vistas, para ayudar al sistema a ser más eficiente a la hora de cargar los datos a mostrar (si por ejemplo se cargan de disco o de red, que suelen ser procesos más costosos). Así, incluso antes de la petición del dibujado de la celda, los datos de la misma pueden cargarse en un proceso anterior a través de estos nuevos métodos.

Una muy interesante función que también se ha implementado en las vistas de tabla ( UITableView) con el objetivo de mejorar aun más la eficacia de las apps, su fluidez y la respuesta que nos dan a la hora de trabajar con ellas.

Conclusiones

Como podemos ver, las nuevas funciones, añadidos y mejoras son increíbles y muy abundantes. Y todavía queda mucho por comentar, así que no os perdáis la siguiente entrega el próximo jueves. Hasta entonces, os invitamos a instalar Xcode 8 y probar todo esto. Un saludo y Good Apple Coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

Betas Enero Banner

iOS 10.3, watchOS 3.2, tvOS 10.2 y macOS 10.12.4… análisis de novedades en desarrollo

Resumen de las novedades de las nuevas betas lanzadas por Apple en enero de 2017 que verán la luz en marzo de este año. Todas las incorporaciones analizadas: posibilidad de contestar reviews, nuevo diálogo para puntuar apps, iconos alternativos de apps, Apple File System, SiriKit... todo en un resumen detallado y con la opción de oír el podcast "Flash#1" de Apple Coding que te cuenta las cosas más en detalle.

  • Enrique Condo

    muy buen post, como de costumbre, instalando el Xcode 8, hora de cacharrear!!!