La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Curs de programació d’iOS Novembre de 2011 Organitza."— Transcripción de la presentación:

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

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

3 CoreLocation La classe que fa d’interfície amb el hardware (GPS i brúixola) s’anomena CLLocationManager CLLocationManager treballa en segon pla mentre la resta de l’aplicació es dedica a altres tasques com rebre la interacció de l’usuari i refrescar la interfície gràfica. Per treballar amb la classe CLLocationManager cal assignar-li un delegat que implementi CLLocationManagerDelegate

4 CoreLocation #import @interface ExempleAppDelegate : NSObject { UIWindow *window; CLLocationManager *locationManager; } @property (nonatomic, retain) IBOutlet UIWindow *window; @end ExempleAppDelegate.h

5 CoreLocation Una instància de CLLocationManager té propietats que podem configurar per concretar la seva freqüència d’actualització i el seu grau de precisió. La propietat distanceFilter fixa la distància, en metres, que el dispositiu ha de recórrer per tal que CLLocationManager informi al seu delegat d’una nova coordenada. [locationManager setDistanceFilter:kCLDistanceFilterNone];

6 CoreLocation La propietat desiredAccuracy defineix el grau de precisió dels resultats que entrega el dispositiu a l’aplicació. CLLocationManager només entregarà la coordenada si aquesta compleix la precisió indicada. [locationManager setDistanceFilter:kCLLocationAccuracyHundredMeters];

7 CoreLocation - (BOOL)application: (UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions { // Crear l’objecte location manager locationManager = [[CLLocationManager alloc] init]; // Assignar el delegate [locationManager setDelegate:self]; // Volem tots els resultats de location manager [locationManager setDistanceFilter:kCLDistanceFilterNone]; // Volem els resultats amb la màxima precisió possible [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; // S’indica que ja pot començar a capturar les coordenades del GPS [locationManager startUpdatingLocation]; [window makeKeyAndVisisble]; return YES; }

8 CoreLocation Quan una instància de CLLocationManager compta amb suficients dades per informar d’una nova coordenada, genera una instància de CLLocation CLLocation s’envia al delegat de CLLocationManager mitjançant el mètode delegat locationManager:didUpdateToLocation:fromLocation

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

10 CoreLocation - (void)locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *)newLocation fromLocation: (CLLocation *)oldLocation { NSLog(@“Nova posició: %f / %f", [newLocation coordinate].latitude, [newLocation coordinate].longitude); } Capturar la nova coordenada del GPS - (void)locationManager: (CLLocationManager *)manager didFailWithError: (NSError *)error { NSLog(@”No es poden obtenir coordenades: %@”, error); } Capturar errors durant la geolocalització [locationManager stopUpdatingLocation]; Capturar errors durant la geolocalització

11 MapKit MapKit és el framework que permet mostrar mapes amb informació geogràfica.

12 MapKit MapKit és el framework que permet mostrar mapes amb informació geogràfica. La classe MKMapView és l’encarregada de mostrar mapes, capturar-ne els tocs i gestos de l’usuari, i mostrar-hi anotacions. Per capturar les operacions que es fan sobre el mapa hem d’implementar el protocol MKMapViewDelegate

13 MapKit MKMapView pot ser de tres tipus: MKMapTypeStandard MKMapTypeSatellite MKMapTypeHybrid

14 Exemple 11 #import mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 367)]; mapView.mapType = MKMapTypeStandard; mapView.delegate = self; mapView.scrollEnabled = YES; mapView.zoomEnabled = YES; [self.view addSubview:mapView]; mapType = [[UISegmentedControl alloc] initWithItems: [NSArray arrayWithObjects:@”Mapa”, @”Satèl·lit”, @”Híbrid”, nil]]; [mapType setSelectedSegmentIndex:0]; [mapType addTarget:self action:@selector(changeType:) forControlEvents:UIControlEventValueChanged]; mapType.frame = CGRectMake(115, 328, 195, 30); mapType.segmentedControlStyle = UISegmentedControlStyleBar; [mapType setTintColor:[UIColor lightGrayColor]]; [self.view addSubview:mapType]; - (void)changeType: (id)sender { if(mapType.selectedSegmentIndex==0){ mapView.mapType=MKMapTypeStandard; } else if (mapType.selectedSegmentIndex==1){ mapView.mapType=MKMapTypeSatellite; } else if (mapType.selectedSegmentIndex==2){ mapView.mapType=MKMapTypeHybrid; } }

15 MapKit Podem definir una regió en un MKMapView. La regió defineix l’àrea geogràfica que volem que mostri el mapa a partir d’una coordenada. #import mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 367)]; mapView.mapType = MKMapTypeStandard; mapView.showsUserLocation=TRUE; mapView.delegate = self; mapView.scrollEnabled = YES; mapView.zoomEnabled = YES; [self.view addSubview:mapView]; MKCoordinateRegion region; MKCoordinateSpan span; span.latitudeDelta=0.2; span.longitudeDelta=0.2; CLLocationCoordinate2D location=mapView.userLocation.coordinate; region.span=span; region.center=location; [mapView setRegion:region animated:TRUE]; [mapView regionThatFits:region];

16 MapKit – Etiquetatge de localitzacions En un MKMapView hi podem afegir anotacions emprant classes que implementin el protocol MKAnnotation

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

18 #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 MapPoint.m MapKit – Etiquetatge de localitzacions

19 Afegir anotacions a un MKMapView CLLocationCoordinate2D coordenada; coordenada.latitude = 41.739031; coordenada.longitude = 1.847071; MapPoint *mp = [[MapPoint alloc] initWithCoordinate:coordenada title:@”CATIC”]; [mapView addAnnotation:mp]; [mp release]; Eliminar anotacions d’un MKMapView [mapView removeAnnotations:[mapView annotations]]; Centrar automàticament les anotacions quan s’afegeixen - (void)mapView: (MKMapView *)mv didAddAnnotationViews: (NSArray *)views { MKAnnotationView *annotationView = [views objectAtIndex:0]; id mp = [annotationView annotation]; MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 250, 250); [mv setRegion:region animated:YES]; }

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

21 La classe NSUserDefaults permet afegir/obtenir les preferències de l’usuari a l’aplicació. Tamany del text Gestió de contrassenyes Username de l’anterior sessió Llistes d’items favorits etc... Aquestes dades es perden quan s’elimina l’aplicació del terminal. NSUserDefaults

22 Les preferències d’usuari de les aplicacions es guarden a la carpeta Settings.bundle de l’aplicació. Aquesta carpeta ha de contenir el fitxer Root.plist on hi definirem parelles de clau-valor amb valors per defecte de l’aplicació.

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


Descargar ppt "Curs de programació d’iOS Novembre de 2011 Organitza."

Presentaciones similares


Anuncios Google