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.
Conteúdo
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.