Desenvolvimento em iOS

Transcrição

Desenvolvimento em iOS
Mapas
Desenvolvimento em iOS
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Introdução
•
•
•
•
As frameworks Core Location e Map Kit podem ser
usadas para criar aplicações com localização e mapas
A framework Core Location usa o hardware do
equipamento para determinar a sua localização actual
A framework Map Kit permite a apresentação de mapas e
a inserção de anotações
A disponibilidade dos serviços de localização depende do
hardware e da sua configuração
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Usar as frameworks (1)
•
É necessário acrescentá-las ao projecto
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Usar as frameworks (2)
•
E acrescentar os header files
•
Delegação, delegação, delegação
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Ondestou
•
•
iOS window-based app
Name: Ondestou
•
•
•
•
Main.m
OndestouAppDelegate.h
OndestouAppDelegate.m
Acrescentar Core Location framework
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Core Location
•
•
Os serviços de localização (location services) permitem obter a
localização geográfica do equipamento
Class CLLocationManager
•
•
•
As instâncias desta classe têm um ponteiro para um delegado
Funcionam numa thread separada da aplicação principal que
gere a UI
Quando uma CLLocationManager consegue obter a localização
(ou falha) informa o delegado enviando-lhe uma mensagem do
protocolo CLLocationManagerDelegate
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Ondestou CLLocationManager
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
OndestouAppDelegate.m
•
No método didFinishLaunchingWithOptions
•
•
•
•
•
locationManager = [[CLLocationManager alloc]init]
[locationManager setDelegate:self];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager startUpdatingLocation];
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
OndestouAppDelegate.m
•
No método dealloc
•
[locationManager setDelegate:nil];
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Objectos CLLocation
•
•
•
•
Latitude e longitude (CLLocationCoordinate2D)
horizontalAccuracy
Outras informações (heading p.ex)
Para haver localizações tem de implementar o método delegado
locationManager:didUpdateToLocation:fromLocation do protocolo
CLLocationManagerDelegate
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Objectos CLLocation
•
No caso de falha a receber a localização tem de se implementar
locationManager:didFailWithError do protocolo
CLLocationManagerDelegate
•
Correr a aplicação (permitir o acesso caso seja solicitado)
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
MapKit Framework
•
•
•
Adicionar a framework
#import <MapKit/MapKit.h> no OndestouAppDelegate.h
Adicionar mapView, activityIndicator e textField
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Fazer as ligações/delegações
•
Abrir MainWindow.xib e acrescentar
•
•
•
•
•
Map View
Text Field (place holder “nome do local”, clear when editing begins, return
key:search)
Activity Indicator View (hides when stopped)
Delegar Text field e map view no OndeestouAppDelegate
Ligar as 3 outlets da AppDelegate aos três objectos da
janela
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
MapView Delegate
•
•
•
•
•
•
Quando a aplicação é lançada é lançado um mapa com a localização actual,
sendo o objectivo que o utilizador possa colocar uma nota sobre esse local
O MapView interage directamente com a core location, para definir a posição
actual, mostrando-a se
[mapView setShowsUserLocation:YES];
Em vez de
[locationManager startUpdatingLocation];
Build+Run
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Problema
•
Mapa sem zoom. Como resolver, i.e., quando fazer o zoom?
•
Só se pode fazer o zoom depois de se ter a posição
•
A melhor forma será…. Delegar
•
O MKMapView tem o delegado OndestouAppDelegate
•
Começa-se por declarar que o OndestouAppDelegate obedece ao protocolo
MKMapViewDelegate
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Protocolo
MKMapViewDelegate
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
didAnnotationViews
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Criar uma MKAnnotation
•
•
•
•
•
Vamos criar uma classe MapPoint que está de acordo
com o protocol MKAnnotation e usá-la para acrescentar
notas à Ondestou
Criar uma nova classe iOS, cocoa touch, ObjC class
Subclass of NSObject
MapPoint.m
Também cria MapPoint.h
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
MapPoint.h
•
•
•
•
•
•
•
•
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
Protocolo <MKAnnotation>
NSString *title;
CLLocationCoordinate2D coordinate;
@property (nonatomic,readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic,copy) NSString *title;
- (id) initWithCoordinate:(CLLocationCoordinate2D) c title:(NSString *)t;
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
MapPoint.m
•
@synthesize coordinate,title;
#import "MapPoint.h” //no AppDelegate.m
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Anotar localizações
•
•
•
•
O text field faz aparecer um teclado. Sempre que se
carrega no “search” (colocamos dismiss key=search)
Como não temos nenhuma IBAction associada ao botão,
podemos delegar 
Sempre que um teclado é retirado do ecran com a tecla de
return, UITextField envia ao seu delegado a mensagem
textFieldShouldReturn
O delegado do text Field é o OndestouAppDelegate
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
textFieldShouldReturn
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Find/found no AppDelegate
- (void) findLocation;
- (void) foundLocation;
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Escrever a nota no MapView
Build+Run
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria
Bibliografia
•
•
•
http://developer.apple.com/
http://www.stanford.edu/class/cs193p
iPhone Programming: The Big Nerd Ranch, caps. 4 e 5
Copyright © 2011 – Catarina Silva – DEI – ESTG - Instituto Politécnico de Leiria