41
Juliana Chahoud @jchahoud

MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Embed Size (px)

DESCRIPTION

Apresentação efetuada na Trilha de iOS do TDC 2014. http://www.thedevelopersconference.com.br/tdc/2014/saopaulo/trilha-ios em 08/08/2014: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs). Aplicativos com mapas e localização do usuário se tornaram essenciais nos dispositivos móveis. Nesta palestra será demonstrado na prática como criar um aplicativo iOS, que exibe em um mapa a localização do usuário e pontos de interesse (restaurantes, bares e atrações turísticas), utilizando o framework MapKit. O aplicativo será todo construído com a nova linguagem de programação da Apple, o Swift.

Citation preview

Page 1: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Juliana Chahoud!@jchahoud

Page 2: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Juliana Chahoud

Page 3: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Aplicações com mapas

• Essenciais nos dispositivos móveis

• MapKit: Framework que permite trabalhar com mapas em iOS

• Alguns apps que usam o MapKit:

Page 4: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Quem fornece dados nos mapas da Apple?

!

• http://gspa21.ls.apple.com/html/attribution.html

• TomTom

• DigitalGlobe

• Waze

• Yelp

• Diversos outros…

Page 5: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Suporte para: Annotations

• Marcações no mapa

Page 6: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Overlays

• "Desenhar" camadas no mapa

Page 7: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

3D e visão de satélite

• Tipos podem ser padrão, satélite ou híbridos

Page 8: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Rotas

• Suporta rotas por automóveis ou a pé

Page 9: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Buscas baseadas em mapa

• Buscas por endereços, pontos de interesse…

• Veremos como montar um app que faz busca por pontos de interesse

Page 10: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

O que preciso para começar?

• Habilitar MapKit Framework

• Importar o framework para utilização: import MapKit

Page 11: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Xcode 6

Page 12: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Habilitando o MapKit

• Em target -> Capabilities: habilitar Maps

Page 13: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

MKMapView

• Exibe os mapas e permite manipulação dos mesmos

Page 14: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Outlet e delegate

Page 15: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Tipos de mapa

!

!

!

• Pode ser alterado via código: !! self.mapView.mapType = MKMapType.Standard ! self.mapView.mapType = MKMapType.Satellite ! self.mapView.mapType = MKMapType.Hybrid

Page 16: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Elementos do Mapa

• Coordenadas: latitude e longitude de um local no mapa

!let tdcLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(-23.600463,-46.674605)

• Região: área do mapa !self.mapView.region = MKCoordinateRegionMakeWithDistance(tdcLocation, 1000, 1000)

Page 17: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Mostrar localização do usuário

• Passo 1: Adicionar a chave NSLocationWhenInUseUsageDescription no plist

• Permite descrever o motivo pelo qual a localização do usuário é necessária

Page 18: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Mostrar localização do usuário

• Passo 2: É preciso solicitar autorização:

! self.locationManager.requestWhenInUseAuthorization()

Page 19: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

User Location: Onde é dada a permissão

Page 20: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Simulando a localização do usuário

Page 21: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Demo: Localização do usuário e região do mapa

Page 22: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Annotations

• Marcações no Mapa, tipicamente feitas com:

• algum tipo de imagem (ex: pin) e

• um “callout bubble” (balão com informações)

Page 23: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Anotações padrão: MKPointAnnotation

• Classe que cria uma marcação padrão (pin) !let ibiraAnnotation:MKPointAnnotation = MKPointAnnotation() !ibiraAnnotation.coordinate = CLLocationCoordinate2DMake(-23.587416, -46.657634) !ibiraAnnotation.title = "Parque do Ibirapuera”

Page 24: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

• Depois de criadas, basta adicionar anotações no mapa com o método addAnnotations

! self.mapView.addAnnotations([ibiraAnnotation])

Como adicionar annotations no mapa

Page 25: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Anotações customizadas

!

!

!

• Para criar uma anotação customizada é necessário basicamente seguir 3 passos… ->

Page 26: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Passo 1: MKAnnotation

• Criar uma classe que implemente o protocolo MKAnnotation

!!!!!class TDCAnnotation: NSObject, MKAnnotation { var coordinate: CLLocationCoordinate2D var title: String var subtitle: String ! init(coordinate: CLLocationCoordinate2D, title: String, subtitle: String) { self.coordinate = coordinate self.title = title self.subtitle = subtitle } } !

Page 27: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Passo 2: como representar essa nova annotation

• Definir uma nova View para representar essa nova classe de annotations no mapa (MKAnnotationView)

!!!func viewForTDCAnnotation //... !!var anView:MKAnnotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier) anView.image = UIImage(named:"TDCLogo") !anView.canShowCallout = true

Page 28: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Passo 3: Implementar mapView: viewForAnnotation:

• Nesse método, primeiro verificar se a view já existe antes de criá-la

!!!if annotation is TDCAnnotation{ //se a view ja existir reutilize... var anView = mapView.dequeueReusableAnnotationViewWithIdentifier ! //senao... anView = self.viewForTDCAnnotation(annotation, reuseIdentifier: reuseId)

Page 29: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Demo: Annotation customizada

Page 30: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Ação de toque no “balão" (callout)

!

!

• Quando ocorre um toque no ‘callout’ é disparado o método:

!mapView:, annotationView:, calloutAccessoryControlTapped: !

• Portanto, ações no toque do callout devem ser implementadas nesse método

Page 31: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

calloutAccessoryControlTapped

• Quando o callout do TDC for selecionado, vamos abrir o site da conferência

!!func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) { ! if view.annotation is TDCAnnotation { let url:NSURL = NSURL(string: “http://www.thedevelopersconference.com.br") UIApplication.sharedApplication().openURL(url) } }

Page 32: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Demo: Toque no callout

Page 33: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

MKLocalSearch

• Permite encontrar pontos de interesse tomando como referência uma região geográfica (map.region). Basicamente dividido entre:

• MKLocalSearchRequest: o que deve ser buscado e em que região

• MKLocalSearchResponse: itens encontrados (MKMapItems)

Page 34: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

MKLocalSearchRequest

!!!var request:MKLocalSearchRequest = MKLocalSearchRequest() !request.naturalLanguageQuery = “Restaurantes" !request.region = self.mapView.region

Page 35: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

MKLocalSearchResponse

• Retorna um array com 10 itens encontrados (MKMapItem)

• MKMapItem: contem informações como nome, telefone e URL do item

• Possui uma propriedade do tipo placemark, que contem as coordenadas e endereço do item

Page 36: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Adicionar itens no mapa

search.startWithCompletionHandler { (response:MKLocalSearchResponse!, error:NSError!) in if !error { var placemarks:NSMutableArray = NSMutableArray() for item in response.mapItems { let place:MKPointAnnotation = MKPointAnnotation() place.coordinate = (item as MKMapItem).placemark.coordinate place.title = (item as MKMapItem).name placemarks.addObject(place) } ! self.mapView.addAnnotations(placemarks)

Page 37: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Demo: Busca por POIs

Page 38: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Gostou da idéia de POIs? Algumas outras APIs• Com limitações de uso

• https://developers.google.com/places/documentation/

• https://developer.foursquare.com/

• http://www.yelp.com/developers

• http://developer.factual.com/

http://www.factual.com/

Page 39: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Mais InformaçõesDocumentação

Location and Maps Programming Guide https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/Introduction/Introduction.html !

Vídeos

WWDC 2013 - What’s New in Map Kit https://developer.apple.com/videos/wwdc/2013/#304 !

Sample Code https://developer.apple.com/library/ios/samplecode/MapCallouts/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009746

Page 40: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Material da palestra

• Apresentação:

• http://www.slideshare.net/julianachahoud

!

• Projeto exemplo:

• https://github.com/jchahoud/TDC-POIs-Swift

Page 41: MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)

Obrigada! Dúvidas?

Juliana Chahoud !

[email protected] @jchahoud

http://jchahoud.com !