Cómo añadir un botón actual ubicación a su aplicación para ios

Video: Como Poner el BOTÓN DE CONTACTO en Tu Perfil de INSTAGRAM

Es fácil que es añadir un botón a la barra de la barra de herramientas en su aplicación de iOS para hacer un zoom a la ubicación actual y luego de vuelta a la región del mapa y la duración de la que se está mostrando.

Agregue el código en negrita para agregar el botón de la MapController método viewDidLoad.

- (Void) viewDidLoad {[súper viewDidLoad] -self.mapView.delegate = auto-self.mapView.showsUserLocation = Si- [libre setInitialRegion] -RTAppDelegate * AppDelegate = [[UIApplicationsharedApplication] delegado] -Si ([[UIDevice currentDevice] userInterfaceIdiom ] == UIUserInterfaceIdiomPad) {UILabel * TitleLabel = [[UILabel alloc] initWithFrame: CGRectMake (0,0,250,44)] - titleLabel.textColor = [UIColor yellowColor] -titleLabel.font = [UIFont boldSystemFontOfSize: 17] -titleLabel.textAlignment = NSTextAlignmentCenter-titleLabel.backgroundColor = [UIColor clearColor] -titleLabel.text = [auto mapTitle] -UIBarButtonItem * titleview = [[UIBarButtonItem alloc] initWithCustomView: TitleLabel] -UIBarButtonItem * flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpacetarget: acción nil : nil] -flexibleSpace.width = 1,0-NSMutableArray * itemsArray = [self.toolbar.items mutableCopy] - [itemsArray InsertObject: flexibleSpace atIndex: [itemsArray COUNT] -2] - [itemsArray InsertObject: titleVie w atIndex: [itemsArray contar] -2] - [setItems self.toolbar: itemsArray animada: NO] -} else {self.title = [appDelegate.trip mapTitle] -} [auto addAnnotations] -UIBarButtonItem * locateButton = [[UIBarButtonItem alloc]initWithTitle: @"Localizar"estilo: UIBarButtonItemStyleBordered objetivo: autoAcción: @selector (goToLocation:)] -si ([[UIDevice currentDevice] userInterfaceIdiom] ==UIUserInterfaceIdiomPad) {NSMutableArray * = itemsArray[Self.toolbar.items mutableCopy] -[ItemsArray InsertObject: locateButtonatIndex: [itemsArray count]] -[SetItems self.toolbar: itemsArray animada: NO] -}else {self.navigationItem.rightBarButtonItem = locateButton -}}

Cuando el usuario pulsa el botón Localizar que cree aquí, que ha especificado que el goToLocation: mensaje ha de ser enviado [acción: @selector (goToLocation :)] al MapController (objetivo: selF).

UIBarButtonItem * locateButton = [[UIBarButtonItem alloc] initWithTitle: @"Localizar" objetivo UIBarButtonItemStylePlain:: estilo acción de auto: @selector (goToLocation:)] - self.navigationItem.rightBarButtonItem = locateButton-

No se olvide, para volver a un lugar que necesita para elegir una ubicación simulada si está utilizando el simulador.

A continuación, añadir el goToLocation: método para MapController.m.

MKUserLocation * annotation = self.mapView.userLocation-CLLocation * location = annotation.location-Si (nil == ubicación) distancia de retorno de CLLocationDistance = MAX (4 * location.horizontalAccuracy, 500) -MKCoordinateRegion región = MKCoordinateRegionMakeWithDistance (location.coordinate, distancia, distancia) - [self.mapView setRegion: región animado: NO] -Si ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {NSArray * itemsArray = self.toolbar.items-UIBarButtonItem * locateButton = [itemsArrayobjectAtIndex: [itemsArray contar] -1] -locateButton.action = @selector (goToDestination:) - locateButton.title = @"Destino"-} else {self.navigationItem.rightBarButtonItem.action = @ selector (goToDestination:) - self.navigationItem.rightBarButtonItem.title = @"Destino"-}}

Cuando el usuario pulsa el botón Localizar, sus primeras comprobaciones de aplicaciones para ver si la ubicación está disponible. (Puede tardar unos segundos después de la aplicación se inicia por la ubicación esté disponible.) Si no es así, simplemente regrese a partir del método sin cambiar la región. (Se podría, por supuesto, mostrar una alerta informando al usuario de lo que está pasando y para volver a intentarlo en 10 segundos o menos)

Si la ubicación está disponible, la aplicación calcula el lapso para la región que el usuario se está moviendo a. En este caso, el código siguiente

CLLocationDistance distancia = MAX (4 * location.horizontalAccuracy, 500) -

calcula el lapso de cuatro veces las horizontalAccuracy del dispositivo (pero no menos de 1000 metros). horizontalAccuracy es un radio de incertidumbre dada la precisión de la dispositivo- es decir, el usuario está en algún lugar dentro de ese círculo.

Video: Tutorial Wallapop - Cómo poner tu ubicación (iPhone)

A continuación, llama a la MKCoordinateRegionMakeWithDistance función que crea una nueva MKCoordinateRegion de las coordenadas y distancia valores especificados.

Si no desea cambiar el lapso, que podría haber establecido simplemente el punto de vista de mapa centerCoordinate propiedad a userLocation, y eso hubiera centrado en la región en la userLocation coordinar sin cambiar el lapso.

Cuando el usuario pulsa el botón Ubicación, cambia el título en el botón para el título y cambiar el mapa @selector a (GoToDestination :). Se accede al botón en el iPad en la barra de herramientas itemsArray y en el iPhone a través de la navigationItem.

Esto significa que la próxima vez que el usuario toca el botón, el goToDestination: mensaje será enviado, por lo que es mejor que añadir el código para MapController.m. Esto establece la región de nuevo a la región de destino y cambia el título botón de retroceso de localizar.

- (Void) goToDestination: (id) {remitente [auto setInitialRegion] -si ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {* NSArray itemsArray = self.toolbar.items-UIBarButtonItem * locateButton = [itemsArrayobjectAtIndex: [itemsArray count] -1] -locateButton.action = @selector (goToLocation:) - locateButton.title = @"Localizar"-} else {self.navigationItem.rightBarButtonItem.action = @ selector (goToLocation:) - self.navigationItem.rightBarButtonItem.title = @"Localizar"-}}

Ahora ejecute su aplicación. Porque ya tiene dos anotaciones en el mapa de Nueva York, es posible que desee establecer el Simulador de usar una ubicación distante como San Francisco. De esta manera, se puede ver fácilmente que el mapa está trabajando.

Debido a que tiene la ubicación del usuario, que podría estar tentado a usar eso para centrar el mapa, y que iba a funcionar bien, siempre y cuando se inicia la materia mecanismo de localización tan pronto como se inicie el programa.

El problema es que el hardware puede tomar un tiempo para encontrar la ubicación actual, y si usted no espere el tiempo suficiente, se produce un error. Puede añadir el código para centrar el mapa a un método que se ejecuta después, como

-(Void) observeValueForKeyPath: (NSString *) keyPath ofObject: (id) cambio de objeto: (NSDictionary *) contexto de cambio: contexto (* void) {

Este mensaje se enviará tan pronto como el mapa empieza a tener información de ubicación, pero se podrán ver una vista inicial y luego se vuelva a mostrar la vista centrada. Por razones estéticas, que realmente necesita para inicializar MapController y Vista del mapa al inicio del programa - un ejercicio para el lector.

Artículos Relacionados