[MÚSICA] Hola, ¿cómo están? Bienvenidos nuevamente. En el video anterior vimos cómo configurar la petición que se hace a los servidores de Apple para que nos devuelva la ruta, la información referente a la ruta y podemos manipularla. En este video vamos a ver qué hacer, dónde recibir y qué hacer con esta información para poder dibujar la ruta sobre el mapa, que es nuestro objetivo final. Bien, toda la información que nos regresan los servidores de Apple la recibimos en un bloque. Este bloque es un bloque del método que se llama Calculate Directions with Completion Handler. Este método establece, tiene un bloque, obviamente y de ahí su nombre, y este bloque tiene dos parámetros. El primero es realmente el que contiene la información, es un objeto de la MKDirections Response, este es el objeto fundamental, el que contiene toda la información necesaria para nuestra ruta. Pero el otro parámetro es un objeto de la clase NSError, que obviamente va a tener un valor si es que se produjo un error. Se produce un error cuando no podemos obtener la ruta que solicitamos por alguna razón. Entonces, recuerden que lo primero que tenemos que hacer, antes de manipular los datos que recibimos, es verificar si el objeto error no tiene ningún valor. Si es Nil entonces podemos continuar, si tiene un valor entonces hacemos algo con el error y volvemos a hacer la petición, eso es muy importante. El objeto respuesta que vamos a llamar respuesta realmente, el objeto de la clase MKDirections Response contiene varias propiedades. Una de ellas es la propiedad route. Esta propiedad es la que contiene la información que queremos para dibujar esta ruta. La propiedad es un objeto de la clase MKRoute y esta propiedad no es otra cosa más que un arreglo de puntos por los que tenemos que pasar para ir del punto inicial al punto final de la petición que le hicimos a los servidores para obtener la ruta. Una vez que recibimos esta información, también recibimos la información necesaria para dibujar la ruta. Esto se hace por medio de la propiedad polyline que tiene cada punto. Esta propiedad polyline, que es un objeto de la clase MKPolyline, lo único que hace es que itera sobre el arreglo que establecen los puntos de la ruta y en cada paso va agregando la propiedad polyline, es decir, una nueva línea al objeto de la clase MapView, al objeto de la clase MKMapView, a nuestra vista, a nuestro mapa, va agregándole línea por línea hasta que terminamos todo el arreglo. Cuando terminamos el arreglo, tendremos la línea dibujada, desde luego. Sin embargo, esta iteración, este dibujo, no va a tener ningún efecto si no se implementó el método del delegado que se llama rendererForOverlay. Este método, lo que hace es crear un objeto normalmente conocido como renderer que es de la clase MKPolylineRenderer, el cual tiene ciertas propiedades que nos permiten establecer cómo se va a dibujar la línea sobre esta ruta. Algunas de sus propiedades son, el ancho de la línea, que se mide en píxeles, el color de la línea, puede ser de los colores clásicos, ya veremos cómo se establece el color. Pero bueno, se tienen que poner estas dos propiedades al menos, el ancho de la línea y el color de la línea para que puedan dibujarse la línea sobre el mapa. También como una propiedad de cada uno de estos puntos, está la propiedad steps. Esta propiedad steps es un objeto de la clase MKRouteStep y contiene una serie de indicaciones para ir del punto anterior al punto actual siguiendo la ruta que recibimos como respuesta. Estas indicaciones se pueden imprimir para que el usuario las vea en texto y las pueda leer y las pueda seguir si es necesario. Y es todo, es todo el proceso que se tiene que hacer para hacer el dibujo, así que, bueno, quisiera terminar con una pregunta para ustedes. ¿Cuál de las siguientes acciones ocasiona que no se dibuje absolutamente nada sobre el mapa? Lean por favor y seleccionen todas las que apliquen. Pues, efectivamente, todas las opciones son correctas. Todas son correctas. Si no declaramos el delegado del MKMapView, desde luego que no vamos a poder dibujar nada en el mapa, porque no vamos a recibir algunas acciones necesarias. Si no implementamos el método renderer for overlay del delgado, tampoco se va a dibujar nada porque es el que establece las propiedades de la línea. Si no se le dice que vamos a implementar el protocolo MKMapView Delegate, bueno, ni siquiera va a correr, va a marcar error al definir la clase, la propiedad delegate al hacer la self va a marcar error, desde luego. No va a haber nada de esto, no va a haber ningún delegado en ese caso. Nuestro programa no va a poder ser el delegado de la vista. Y si no se colocó un color en el método RenderForOverlay, tampoco se va a ver nada. No se va a ver ninguna ruta debido a que el color por default es transparente, así que no va a pintar nada. Tomen en cuenta eso para la hora de configurar. Lo único que nos queda, pues, es ir directamente a codificar un ejemplo para ver todas estas cuestiones teóricas directamente en la práctica. Así que, nos vemos en el próximo video. Muchas gracias. [MÚSICA]