Como adicionar um botão atual local para seu aplicativo ios

É fácil é adicionar um botão à barra de ferramentas em seu aplicativo iOS para fazer zoom para o local atual e depois voltar para a região do mapa e span você está exibindo atualmente.

Video: Como mudar a localização do celular - Fake Location

Adicione o código em negrito para adicionar o botão na MapController método viewDidLoad.

- (Void) viewDidLoad {[Super viewDidLoad] -self.mapView.delegate = auto-self.mapView.showsUserLocation = Sim-[auto setInitialRegion] -RTAppDelegate * appDelegate = [[UIApplicationsharedApplication] delegado] -se ([[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: ação nil : nil] -flexibleSpace.width = 1,0-NSMutableArray * itemsArray = [self.toolbar.items mutableCopy] - [itemsArray insertObject: flexibleSpace atIndex: [itemsArray contar] -2] - [itemsArray insertObject: titleVie w atIndex: [itemsArray contar] -2] - [setItems self.toolbar: itemsArray animado: NO] -} else {self.title = [appDelegate.trip MapTitle] -} [auto addAnnotations] -UIBarButtonItem * locateButton = [[UIBarButtonItem alloc]initWithTitle: @"Localizar"estilo: UIBarButtonItemStyleBordered alvo: autoaction: @selector (goToLocation:)] -se ([[UIDevice currentDevice] userInterfaceIdiom] ==UIUserInterfaceIdiomPad) {NSMutableArray * = itemsArray[Self.toolbar.items mutableCopy] -[ItemsArray insertObject: locateButtonatIndex: [itemsArray contar]] -[SetItems self.toolbar: itemsArray animado: NO] -}outro {self.navigationItem.rightBarButtonItem = locateButton -}}

Quando o usuário toca o botão Locate você cria aqui, você especificou que o goToLocation: mensagem é para ser enviou [ação: @selector (goToLocation :)] ao MapController (alvo: self).

UIBarButtonItem * locateButton = [[UIBarButtonItem alloc] initWithTitle: @"Localizar" alvo UIBarButtonItemStylePlain:: estilo acção de auto: @selector (goToLocation:)] - self.navigationItem.rightBarButtonItem = locateButton-

Não se esqueça, para voltar para um local que você precisa para escolher um local simulado se você estiver usando o Simulator.

Em seguida, adicione o goToLocation: método para MapController.m.

MKUserLocation * anotação = self.mapView.userLocation-CLLocation * = local annotation.location-se (nil == localização) distância de retorno-CLLocationDistance = MAX (4 * location.horizontalAccuracy, 500) -MKCoordinateRegion região = MKCoordinateRegionMakeWithDistance (location.coordinate, distância, distância) - [self.mapView setRegion: região animada: NÃO] -se ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {NSArray * itemsArray = self.toolbar.items-UIBarButtonItem * locateButton = [itemsArrayobjectAtIndex: [itemsArray Quantidade] -1] -locateButton.action = @selector (goToDestination:) - = @ locateButton.title"Destino"-} else {self.navigationItem.rightBarButtonItem.action = @ selector (goToDestination:) - self.navigationItem.rightBarButtonItem.title = @"Destino"-}}

Quando o usuário toca o botão Locate, o aplicativo verifica primeiro para ver se o local está disponível. (Pode demorar alguns segundos após a aplicação inicia para o local para se tornar disponível.) Se não, você simplesmente devolver a partir do método sem alterar a região. (Você poderia, é claro, mostrar um alerta informando o usuário que está acontecendo e tentar novamente em 10 segundos ou menos)

Se o local estiver disponível, o aplicativo calcula o tempo para a região o usuário está se movendo para. Neste caso, o código a seguir

CLLocationDistance distância = MAX (4 * location.horizontalAccuracy, 500) -


calcula a extensão a ser quatro vezes os horizontalAccuracy do dispositivo (mas não menos de 1.000 metros). horizontalAccuracy é um raio de incerteza dada a precisão do dispositivo- isto é, o usuário está em algum lugar dentro desse círculo.

Video: What's New with CarPlay in iOS 10

Você, então, chamar a MKCoordinateRegionMakeWithDistance função que cria um novo MKCoordinateRegion a partir dos valores das coordenadas e distância especificados.

Se você não deseja alterar a extensão, você poderia ter simplesmente definir o Mapa visão de centerCoordinate propriedade para userLocation, e que teria centrado a região no userLocation coordenar, sem alterar o tempo.

Quando o usuário toca o botão de Localização, você alterar o título no botão para o título Mapa e mudar o @selector para (GoToDestination :). Você acessa o botão no iPad na barra de ferramentas itemsArray e no iPhone através da navigationItem.

Isto significa que a próxima vez que o usuário toca no botão, o goToDestination: mensagem será enviada, então é melhor você adicionar o código para MapController.m. Isso define a região de volta para a região de destino e alterna o título do botão volta de localizar.

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

Agora, execute o aplicativo. Porque você já tem duas anotações no mapa da cidade de Nova York, você pode querer definir o simulador para usar um local distante, como San Francisco. Dessa forma, você pode ver facilmente que o mapa está funcionando.

Porque você tem a localização do usuário, você pode ser tentado a usar isso para centrar o mapa, e que iria funcionar bem, contanto que você começar o material mecanismo de busca local assim que os lançamentos do programa.

O problema é que o hardware pode demorar um pouco para encontrar o local atual, e se você não esperar o tempo suficiente, você obterá um erro. Você pode adicionar o código para centrar o mapa para um método que executa mais tarde, como

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

Esta mensagem é enviada assim que o mapa começa a ficar informações de localização, mas você verá uma visão inicial e depois uma reexibição da visão centrada. Por razões estéticas, você realmente precisa para inicializar MapController e Visão do mapa no arranque do programa - um exercício para o leitor.


Publicações relacionadas