SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
Juliana Chahoud!
@jchahoud
Juliana Chahoud
Aplicações com mapas
• Essenciais nos dispositivos móveis
• MapKit: Framework que permite trabalhar com
mapas em iOS
• Alguns apps que usam o MapKit:
Quem fornece dados nos
mapas da Apple?
!
• http://gspa21.ls.apple.com/html/
attribution.html
• TomTom
• DigitalGlobe
• Waze
• Yelp
• Diversos outros…
Suporte para: Annotations
• Marcações no mapa
Overlays
• "Desenhar" camadas no
mapa
3D e visão de satélite
• Tipos podem ser padrão,
satélite ou híbridos
Rotas
• Suporta rotas por
automóveis ou a pé
Buscas baseadas em mapa
• Buscas por endereços,
pontos de interesse…
• Veremos como montar um
app que faz busca por
pontos de interesse
O que preciso para começar?
• Habilitar MapKit Framework
• Importar o framework para utilização:
import MapKit
Xcode 6
Habilitando o MapKit
• Em target -> Capabilities: habilitar Maps
MKMapView
• Exibe os mapas e permite manipulação dos
mesmos
Outlet e delegate
Tipos de mapa
!
!
!
• Pode ser alterado via código:
!
!
self.mapView.mapType = MKMapType.Standard
!
self.mapView.mapType = MKMapType.Satellite
!
self.mapView.mapType = MKMapType.Hybrid
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)
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
Mostrar localização do usuário
• Passo 2: É preciso solicitar
autorização:
!
self.locationManager.requestWhenInUseAuthorization()
User Location: Onde é dada a
permissão
Simulando a localização do
usuário
Demo: Localização do
usuário e região do mapa
Annotations
• Marcações no Mapa,
tipicamente feitas com:
• algum tipo de imagem
(ex: pin) e
• um “callout bubble” (balão
com informações)
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”
• Depois de criadas, basta adicionar
anotações no mapa com o método
addAnnotations
!
self.mapView.addAnnotations([ibiraAnnotation])
Como adicionar annotations no
mapa
Anotações customizadas
!
!
!
• Para criar uma anotação customizada é
necessário basicamente seguir 3 passos… ->
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
}
}
!
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
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)
Demo: Annotation
customizada
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
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)
}
}
Demo: Toque no callout
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)
MKLocalSearchRequest
!
!
!
var request:MKLocalSearchRequest = MKLocalSearchRequest()
!
request.naturalLanguageQuery = “Restaurantes"
!
request.region = self.mapView.region
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
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)
Demo: Busca por 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/
Mais Informações
Documentaçã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
Material da palestra
• Apresentação:
• http://www.slideshare.net/julianachahoud
!
• Projeto exemplo:
• https://github.com/jchahoud/TDC-POIs-Swift
Obrigada!
Dúvidas?
Juliana Chahoud
!
jchahoud@gmail.com
@jchahoud
http://jchahoud.com
!

Más contenido relacionado

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

Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...Dextra Sistemas / Etec Itu
 
Drag and Drop no iOS 11
Drag and Drop no iOS 11Drag and Drop no iOS 11
Drag and Drop no iOS 11Rodrigo Borges
 
Desenvolvimento Moderno de Aplicativos Android
Desenvolvimento Moderno de Aplicativos AndroidDesenvolvimento Moderno de Aplicativos Android
Desenvolvimento Moderno de Aplicativos AndroidNelson Glauber Leal
 
Geo on Rails - Um guia para manter o seu cabelo.
Geo on Rails - Um guia para manter o seu cabelo.Geo on Rails - Um guia para manter o seu cabelo.
Geo on Rails - Um guia para manter o seu cabelo.Guilherme Vinicius Moreira
 
Nova API do Google Maps e Possíveis Aplicações
Nova API do Google Maps e Possíveis AplicaçõesNova API do Google Maps e Possíveis Aplicações
Nova API do Google Maps e Possíveis AplicaçõesZigotto Tecnologia
 
Minicurso google maps e ajax apostila betim
Minicurso google maps e ajax   apostila betimMinicurso google maps e ajax   apostila betim
Minicurso google maps e ajax apostila betimSylvio Silveira Santos
 
Introdução ao OpenLayers
Introdução ao OpenLayersIntrodução ao OpenLayers
Introdução ao OpenLayersFernando Quadro
 
Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Nelson Glauber Leal
 
Aula06 android localizacao
Aula06 android localizacaoAula06 android localizacao
Aula06 android localizacaoRoberson Alves
 
SESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidSESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidRafael Sakurai
 
Android-Aplicações como foco.
Android-Aplicações como foco.Android-Aplicações como foco.
Android-Aplicações como foco.João VIdiri
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_onRoberson Alves
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAline Borges
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamAndré Espeiorin
 
GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015Daniel Costa Gimenes
 
Aulas Google Android
Aulas Google AndroidAulas Google Android
Aulas Google AndroidIury Teixeira
 

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

Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
 
Drag and Drop no iOS 11
Drag and Drop no iOS 11Drag and Drop no iOS 11
Drag and Drop no iOS 11
 
Desenvolvimento Moderno de Aplicativos Android
Desenvolvimento Moderno de Aplicativos AndroidDesenvolvimento Moderno de Aplicativos Android
Desenvolvimento Moderno de Aplicativos Android
 
Geo on Rails - Um guia para manter o seu cabelo.
Geo on Rails - Um guia para manter o seu cabelo.Geo on Rails - Um guia para manter o seu cabelo.
Geo on Rails - Um guia para manter o seu cabelo.
 
Nova API do Google Maps e Possíveis Aplicações
Nova API do Google Maps e Possíveis AplicaçõesNova API do Google Maps e Possíveis Aplicações
Nova API do Google Maps e Possíveis Aplicações
 
Nokia SDK for Java
Nokia SDK for JavaNokia SDK for Java
Nokia SDK for Java
 
Minicurso google maps e ajax apostila betim
Minicurso google maps e ajax   apostila betimMinicurso google maps e ajax   apostila betim
Minicurso google maps e ajax apostila betim
 
Introdução ao OpenLayers
Introdução ao OpenLayersIntrodução ao OpenLayers
Introdução ao OpenLayers
 
Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023
 
Aula06 android localizacao
Aula06 android localizacaoAula06 android localizacao
Aula06 android localizacao
 
Apresentação Google Android
Apresentação Google AndroidApresentação Google Android
Apresentação Google Android
 
SESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidSESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao Android
 
Android-Aplicações como foco.
Android-Aplicações como foco.Android-Aplicações como foco.
Android-Aplicações como foco.
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
Apresentação Phonegap
Apresentação PhonegapApresentação Phonegap
Apresentação Phonegap
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View Adapter
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
 
GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015GDG ABC Meetup #5 - Tendências 2015
GDG ABC Meetup #5 - Tendências 2015
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Aulas Google Android
Aulas Google AndroidAulas Google Android
Aulas Google Android
 

Más de Juliana Chahoud

Usando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App CreditasUsando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App CreditasJuliana Chahoud
 
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...Juliana Chahoud
 
Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018Juliana Chahoud
 
Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPProgramação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPJuliana Chahoud
 
Desenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda telaDesenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda telaJuliana Chahoud
 
Usando o Twitter na Internet das Coisas - #WebBR2016
Usando o Twitter  na Internet das Coisas - #WebBR2016Usando o Twitter  na Internet das Coisas - #WebBR2016
Usando o Twitter na Internet das Coisas - #WebBR2016Juliana Chahoud
 
Microservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como PlataformaMicroservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como PlataformaJuliana Chahoud
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftJuliana Chahoud
 
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)Juliana Chahoud
 
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosDissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosJuliana Chahoud
 
Planejamento para Serviços Web Semânticos
Planejamento para Serviços Web SemânticosPlanejamento para Serviços Web Semânticos
Planejamento para Serviços Web SemânticosJuliana Chahoud
 

Más de Juliana Chahoud (11)

Usando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App CreditasUsando React Native & Multi Módulos para Escalar App Creditas
Usando React Native & Multi Módulos para Escalar App Creditas
 
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
 
Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018Desenvolvimento de Apps Mobile - Tendências para 2018
Desenvolvimento de Apps Mobile - Tendências para 2018
 
Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPProgramação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHP
 
Desenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda telaDesenvolvimento para experiências em real time com foco na segunda tela
Desenvolvimento para experiências em real time com foco na segunda tela
 
Usando o Twitter na Internet das Coisas - #WebBR2016
Usando o Twitter  na Internet das Coisas - #WebBR2016Usando o Twitter  na Internet das Coisas - #WebBR2016
Usando o Twitter na Internet das Coisas - #WebBR2016
 
Microservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como PlataformaMicroservices: Utilizando o Twitter como Plataforma
Microservices: Utilizando o Twitter como Plataforma
 
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com SwiftSemcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
 
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
 
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web SemânticosDissertação de Mestrado - Planejamento para Serviços Web Semânticos
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
 
Planejamento para Serviços Web Semânticos
Planejamento para Serviços Web SemânticosPlanejamento para Serviços Web Semânticos
Planejamento para Serviços Web Semânticos
 

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

  • 3. Aplicações com mapas • Essenciais nos dispositivos móveis • MapKit: Framework que permite trabalhar com mapas em iOS • Alguns apps que usam o MapKit:
  • 4. Quem fornece dados nos mapas da Apple? ! • http://gspa21.ls.apple.com/html/ attribution.html • TomTom • DigitalGlobe • Waze • Yelp • Diversos outros…
  • 5. Suporte para: Annotations • Marcações no mapa
  • 7. 3D e visão de satélite • Tipos podem ser padrão, satélite ou híbridos
  • 8. Rotas • Suporta rotas por automóveis ou a pé
  • 9. Buscas baseadas em mapa • Buscas por endereços, pontos de interesse… • Veremos como montar um app que faz busca por pontos de interesse
  • 10. O que preciso para começar? • Habilitar MapKit Framework • Importar o framework para utilização: import MapKit
  • 12. Habilitando o MapKit • Em target -> Capabilities: habilitar Maps
  • 13. MKMapView • Exibe os mapas e permite manipulação dos mesmos
  • 15. Tipos de mapa ! ! ! • Pode ser alterado via código: ! ! self.mapView.mapType = MKMapType.Standard ! self.mapView.mapType = MKMapType.Satellite ! self.mapView.mapType = MKMapType.Hybrid
  • 16. 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)
  • 17. 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
  • 18. Mostrar localização do usuário • Passo 2: É preciso solicitar autorização: ! self.locationManager.requestWhenInUseAuthorization()
  • 19. User Location: Onde é dada a permissão
  • 21. Demo: Localização do usuário e região do mapa
  • 22. Annotations • Marcações no Mapa, tipicamente feitas com: • algum tipo de imagem (ex: pin) e • um “callout bubble” (balão com informações)
  • 23. 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”
  • 24. • Depois de criadas, basta adicionar anotações no mapa com o método addAnnotations ! self.mapView.addAnnotations([ibiraAnnotation]) Como adicionar annotations no mapa
  • 25. Anotações customizadas ! ! ! • Para criar uma anotação customizada é necessário basicamente seguir 3 passos… ->
  • 26. 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 } } !
  • 27. 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
  • 28. 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)
  • 30. 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
  • 31. 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) } }
  • 32. Demo: Toque no callout
  • 33. 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)
  • 34. MKLocalSearchRequest ! ! ! var request:MKLocalSearchRequest = MKLocalSearchRequest() ! request.naturalLanguageQuery = “Restaurantes" ! request.region = self.mapView.region
  • 35. 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
  • 36. 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)
  • 38. 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/
  • 39. Mais Informações Documentaçã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
  • 40. Material da palestra • Apresentação: • http://www.slideshare.net/julianachahoud ! • Projeto exemplo: • https://github.com/jchahoud/TDC-POIs-Swift