1 / 23

Curs de programació d ’ iOS

Curs de programació d ’ iOS. Novembre de 2011. Organitza. 11 L ocalització i mapes ( CoreLocation i MapKit ). La localització permet que les aplicacions puguin determinar la ubicació geogràfica del dispositiu .

malaya
Download Presentation

Curs de programació d ’ iOS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curs de programació d’iOS Novembre de 2011 Organitza

  2. 11 Localització i mapes(CoreLocation i MapKit) • La localitzaciópermet que les aplicacionspuguin determinar la ubicaciógeogràfica del dispositiu. • L’SDK proporciona el frameworkCoreLocationper obtenir les dades del GPS i la brúixola del disposotiu. • L’SDK empra elsmapes de Google Mapsperò per manipular-los proporciona el frameworkMapKit.

  3. CoreLocation • La classe que fa d’interfícieamb el hardware (GPS i brúixola)s’anomenaCLLocationManager • CLLocationManager treballa en segonplamentre la resta de l’aplicació es dedica a altres tasques comrebre la interacció de l’usuari i refrescar la interfíciegràfica. • Per treballaramb la classeCLLocationManager cal assignar-li un delegat que implementiCLLocationManagerDelegate

  4. CoreLocation • ExempleAppDelegate.h #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> @interface ExempleAppDelegate : NSObject <UIApplicationDelegate, CLLocationManagerDelegate> { UIWindow *window; CLLocationManager *locationManager; } @property (nonatomic, retain) IBOutletUIWindow *window; @end

  5. CoreLocation • Una instància de CLLocationManager té propietats que podem configurar per concretar la sevafreqüènciad’actualització i el seugrau de precisió. • La propietatdistanceFilterfixa la distància, en metres, que el dispositiu ha de recórrer per tal que CLLocationManagerinformi al seudelegatd’una nova coordenada. [locationManagersetDistanceFilter:kCLDistanceFilterNone];

  6. CoreLocation • La propietatdesiredAccuracydefineix el grau de precisiódelsresultats que entrega el dispositiu a l’aplicació. CLLocationManagernomésentregarà la coordenada si aquestacompleix la precisió indicada. [locationManagersetDistanceFilter:kCLLocationAccuracyHundredMeters];

  7. CoreLocation - (BOOL)application: (UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions { // Crear l’objectelocation manager locationManager = [[CLLocationManageralloc] init]; // Assignar el delegate [locationManagersetDelegate:self]; // Volemtotselsresultats de location manager [locationManagersetDistanceFilter:kCLDistanceFilterNone]; // Volemelsresultatsamb la màximaprecisiópossible [locationManagersetDesiredAccuracy:kCLLocationAccuracyBest]; // S’indica que japotcomençar a capturar les coordenades del GPS [locationManagerstartUpdatingLocation]; [windowmakeKeyAndVisisble]; return YES; }

  8. CoreLocation • Quan una instància de CLLocationManagercomptaambsuficientsdades per informar d’una nova coordenada, genera una instància de CLLocation • CLLocations’envia al delegat de CLLocationManagermitjançant el mètodedelegatlocationManager:didUpdateToLocation:fromLocation

  9. CoreLocation CLLocation horizontalAccuracy = 1000 CLLocationCoordinate2D Latitude = 41.739031 Longitude= 1.847071

  10. CoreLocation • Capturar la nova coordenada del GPS - (void)locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *)newLocationfromLocation: (CLLocation *)oldLocation { NSLog(@“Nova posició: %f / %f", [newLocationcoordinate].latitude, [newLocationcoordinate].longitude); } • Capturar errorsdurant la geolocalització - (void)locationManager: (CLLocationManager *)manager didFailWithError: (NSError *)error { NSLog(@”No es poden obtenircoordenades: %@”, error); } • Capturar errorsdurant la geolocalització [locationManagerstopUpdatingLocation];

  11. MapKit • MapKités el framework que permet mostrar mapesambinformaciógeogràfica.

  12. MapKit • MapKités el framework que permet mostrar mapesambinformaciógeogràfica. • La classeMKMapViewésl’encarregada de mostrar mapes, capturar-neelstocs i gestos de l’usuari, i mostrar-hi anotacions. • Per capturar les operacions que es fan sobre el mapa hemd’implementar el protocolMKMapViewDelegate

  13. MapKit • MKMapViewpot ser de tres tipus: MKMapTypeStandardMKMapTypeSatelliteMKMapTypeHybrid

  14. Exemple 11 #import <MapKit/MapKit.h> mapView = [[MKMapViewalloc] initWithFrame:CGRectMake(0, 0, 320, 367)]; mapView.mapType = MKMapTypeStandard; mapView.delegate = self; mapView.scrollEnabled = YES; mapView.zoomEnabled = YES; [self.viewaddSubview:mapView]; mapType= [[UISegmentedControlalloc] initWithItems: [NSArrayarrayWithObjects:@”Mapa”, @”Satèl·lit”, @”Híbrid”, nil]]; [mapType setSelectedSegmentIndex:0]; [mapTypeaddTarget:self action:@selector(changeType:) forControlEvents:UIControlEventValueChanged]; mapType.frame = CGRectMake(115, 328, 195, 30); mapType.segmentedControlStyle = UISegmentedControlStyleBar; [mapTypesetTintColor:[UIColorlightGrayColor]]; [self.viewaddSubview:mapType]; - (void)changeType: (id)sender { if(mapType.selectedSegmentIndex==0) { mapView.mapType=MKMapTypeStandard; } elseif(mapType.selectedSegmentIndex==1) { mapView.mapType=MKMapTypeSatellite; } elseif(mapType.selectedSegmentIndex==2) { mapView.mapType=MKMapTypeHybrid; } }

  15. MapKit • Podem definir una regió en un MKMapView. La regiódefineixl’àreageogràfica que volem que mostri el mapa a partir d’una coordenada. #import <MapKit/MapKit.h> mapView = [[MKMapViewalloc] initWithFrame:CGRectMake(0, 0, 320, 367)]; mapView.mapType = MKMapTypeStandard; mapView.showsUserLocation=TRUE; mapView.delegate = self; mapView.scrollEnabled = YES; mapView.zoomEnabled = YES; [self.viewaddSubview:mapView]; MKCoordinateRegionregion; MKCoordinateSpanspan; span.latitudeDelta=0.2; span.longitudeDelta=0.2; CLLocationCoordinate2D location=mapView.userLocation.coordinate; region.span=span; region.center=location; [mapViewsetRegion:regionanimated:TRUE]; [mapViewregionThatFits:region];

  16. MapKit – Etiquetatge de localitzacions • En un MKMapView hi podemafegiranotacionsemprantclasses que implementin el protocolMKAnnotation

  17. MapKit – Etiquetatge de localitzacions • Primer hem de crear i definir una classeNSObject que implementi el protocolMKAnnotation MapPoint.h #import <Foundation/Foundation.h> #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h> @interface MapPoint : NSObject <MKAnnotation> { NSString *title; CLLocationCoordinate2D coordinate; } @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; @property (nonatomic, copy) NSString *title; - (id) initWithCoordinate: (CLLocationCoordinate2D)c title: (NSString *)t; @end

  18. MapKit – Etiquetatge de localitzacions MapPoint.m #import “MapPoint.h” @implementation MapPoint @synthesize coordinate, title; - (id)initWithCoordinate: (CLLocationCoordinate2D)c title: (NSString *)t { self = [super init]; coordinate = c; [self setTitle:t]; return self; } - (void)dealloc { [title release]; [super dealloc]; } @end

  19. MapKit – Etiquetatge de localitzacions • Afegiranotacions a un MKMapView CLLocationCoordinate2D coordenada; coordenada.latitude = 41.739031; coordenada.longitude = 1.847071; MapPoint *mp = [[MapPointalloc] initWithCoordinate:coordenadatitle:@”CATIC”]; [mapViewaddAnnotation:mp]; [mp release]; • Eliminar anotacionsd’unMKMapView [mapViewremoveAnnotations:[mapViewannotations]]; • Centrar automàticament les anotacionsquans’afegeixen - (void)mapView: (MKMapView *)mv didAddAnnotationViews: (NSArray *)views { MKAnnotationView *annotationView = [views objectAtIndex:0]; id <MKAnnotation> mp = [annotationView annotation]; MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 250, 250); [mv setRegion:regionanimated:YES]; }

  20. 12 Persistència de dades • Preferències de l’usuari(NSUserDefaults) • Base de dades SQL (SQLite)

  21. NSUserDefaults • La classeNSUserDefaultspermetafegir/obtenir les preferències de l’usuari a l’aplicació. • Tamany del text • Gestió de contrassenyes • Username de l’anteriorsessió • Llistesd’itemsfavorits • etc... • Aquestesdades es perdenquans’eliminal’aplicació del terminal.

  22. NSUserDefaults • Les preferènciesd’usuari de les aplicacions es guarden a la carpeta Settings.bundle de l’aplicació. • Aquesta carpeta ha de contenir el fitxerRoot.pliston hi definiremparelles de clau-valor ambvalors per defecte de l’aplicació.

  23. NSUserDefaults • Afegir una preferènciad’usuari al diccionari: NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults]; [defaults setObject:@”anadalg@gmail.com” forKey:@”username”]; [defaults setObject:@”3758nci56v456v545vg” forKey:@”passwd_xifrat”]; [defaults synchronize]; • Obtenir una preferènciad’usuari del diccionari: NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults]; NSString *username = [defaults objectForKey:@”username”]; NSString *passwd = [defaults objectForKey:@”passwd_xifrat”];

More Related