Tenho um mapa que mostra corretamente, a única coisa que quero fazer agora é definir o nível de zoom quando ele carregar. Existe uma maneira de fazer isso?
obrigado
Eu encontrei uma solução, que é muito simples e funciona. Use MKCoordinateRegionMakeWithDistance
para definir a distância em metros verticalmente e horizontalmente para obter o zoom desejado. E é claro que, ao atualizar sua localização, você obterá as coordenadas corretas ou poderá especificá-lo diretamente na CLLocationCoordinate2D
inicialização, se for isso o que você precisa fazer:
CLLocationCoordinate2D noLocation;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(noLocation, 500, 500);
MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:viewRegion];
[self.mapView setRegion:adjustedRegion animated:YES];
self.mapView.showsUserLocation = YES;
Rápido:
let location = ...
let region = MKCoordinateRegion( center: location.coordinate, latitudinalMeters: CLLocationDistance(exactly: 5000)!, longitudinalMeters: CLLocationDistance(exactly: 5000)!)
mapView.setRegion(mapView.regionThatFits(region), animated: true)
MKCoordinateRegionMakeWithDistance
ainda está por aí em Swift. Esta solução funciona!Com base no fato de que as linhas de longitude são espaçadas igualmente em qualquer ponto do mapa, há uma implementação muito simples para definir centerCoordinate e zoomLevel:
fonte
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(NSUInteger)zoomLevel animated:(BOOL)animated { MKCoordinateSpan span = MKCoordinateSpanMake(0, 360/pow(2, zoomLevel)*self.frame.size.width/256); [self setRegion:MKCoordinateRegionMake(centerCoordinate, span) animated:animated]; }
double z = log2(360 * ((self.mapView.frame.size.width/256) / self.mapView.region.span.longitudeDelta));
Não está embutido, mas eu vi / usei este código. Isso permite que você use:
Nota: Este não é o meu código, eu não o escrevi, portanto, não posso assumir os créditos por ele
fonte
Você também pode aplicar zoom usando MKCoordinateRegion e definindo seu delta de latitude e longitude de extensão. Abaixo está uma referência rápida e aqui está a referência do iOS. Não vai adiantar nada, mas deve permitir que você defina o zoom quando desenha o mapa.
Editar 1:
fonte
Uma implementação simples do Swift, se você usar tomadas.
Com base na resposta de @Carnal.
fonte
Implementação rápida
fonte
IBOutlet
para o seumap
, você o define como um emMapViewWithZoom
vez de um simplesMKMapView
. Em seguida, você pode definir o nível de zoom commap.zoomLevel = 1
oumap.zoomLevel = 0.5
mapView.zoomLevel -= 2
Para o Swift 3 , é um avanço muito rápido:
Basta definir o lat-, long-Meters
<CLLocationDistance>
e o mapView ajustará o nível de zoom aos seus valores.fonte
Com base na ótima resposta de @AdilSoomro . Eu vim com isto:
fonte
Espero que o seguinte fragmento de código ajude você.
Você pode escolher qualquer valor em vez de 0,5 para reduzir ou aumentar o nível de zoom. Usei esses métodos clicando em dois botões.
fonte
Uma resposta do Swift 2.0 utilizando NSUserDefaults para salvar e restaurar o zoom e a posição do mapa.
Função para salvar a posição do mapa e zoom:
Execute a função sempre que o mapa for movido:
Função para salvar o zoom e a posição do mapa:
Adicione isto a viewDidLoad:
fonte
Eu sei que esta é uma resposta tardia, mas eu só queria abordar a questão de definir o nível de zoom sozinho. A resposta da goldmine é ótima, mas descobri que não está funcionando bem o suficiente em meu aplicativo.
Em uma inspeção mais próxima, a mina de ouro afirma que "as linhas de longitude são espaçadas igualmente em qualquer ponto do mapa". Isso não é verdade, na verdade são as linhas de latitude que estão espaçadas igualmente de -90 (pólo sul) a +90 (pólo norte). As linhas de longitude são espaçadas em sua largura máxima no equador, convergindo para um ponto nos pólos.
A implementação que adotei é, portanto, usar o cálculo de latitude da seguinte forma:
Espero que ajude neste estágio final.
fonte
Rápido:
locValue é a sua coordenada.
fonte
Aqui, eu coloco minha resposta e está funcionando para o rápido 4.2 .
MKMapView center e zoom in
fonte
Com base na resposta do quentinadam
Swift 5.1
fonte
MKMapView
extensão com base nesta resposta (+ precisão do nível de zoom de ponto flutuante):fonte