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