MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Interesse (POIs)
MapKit é um framework do iOS que permite trabalhar com mapas. Ele fornece funcionalidades como anotações, buscas por pontos de interesse e mostrar a localização do usuário. Aplicativos populares como Maps e Waze usam MapKit.
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 dousuário
• Passo 1: Adicionar a chave
NSLocationWhenInUseUsageDescription no plist
• Permite descrever o motivo pelo qual a
localização do usuário é necessária
Annotations
• Marcações noMapa,
tipicamente feitas com:
• algum tipo de imagem
(ex: pin) e
• um “callout bubble” (balão
com informações)
23.
Anotações padrão:
MKPointAnnotation
• Classeque 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 decriadas, basta adicionar
anotações no mapa com o método
addAnnotations
!
self.mapView.addAnnotations([ibiraAnnotation])
Como adicionar annotations no
mapa
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: comorepresentar 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)
Ação de toqueno “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 ocallout 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)
}
}
MKLocalSearch
• Permite encontrarpontos 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)
MKLocalSearchResponse
• Retorna umarray 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 nomapa
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)
Gostou da idéiade 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 andMaps 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