Tengo un mapa que se muestra correctamente, lo único que quiero hacer ahora es establecer el nivel de zoom cuando se carga. ¿Hay alguna forma de hacer esto?
Gracias
Encontré una solución, que es muy simple y funciona. Use MKCoordinateRegionMakeWithDistance
para establecer la distancia en metros vertical y horizontalmente para obtener el zoom deseado. Y luego, por supuesto, cuando actualice su ubicación, obtendrá las coordenadas correctas, o puede especificarlas directamente CLLocationCoordinate2D
al inicio, si eso es lo que necesita hacer:
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
todavía existe en Swift. ¡Esta solución funciona!Basado en el hecho de que las líneas de longitud están espaciadas por igual en cualquier punto del mapa, existe una implementación muy simple para establecer centerCoordinate y zoomLevel:
fuente
- (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));
No está integrado, pero he visto / usado este código. Esto le permite usar esto:
Nota: este no es mi código, no lo escribí, por lo que no puedo atribuirme el mérito
fuente
También puede hacer zoom utilizando MKCoordinateRegion y estableciendo su delta de latitud y longitud. A continuación se muestra una referencia rápida y aquí está la referencia de iOS. No hará nada elegante, pero debería permitirle establecer el zoom cuando dibuje el mapa.
Edición 1:
fuente
Una implementación simple de Swift, si usa puntos de venta.
Basado en la respuesta de @ Carnal.
fuente
Implementación rápida
fuente
IBOutlet
a tumap
, lo defines como un enMapViewWithZoom
lugar de un simpleMKMapView
. Luego, puede configurar el nivel de zoom conmap.zoomLevel = 1
omap.zoomLevel = 0.5
mapView.zoomLevel -= 2
Para Swift 3 es bastante rápido:
Simplemente defina los metros de
<CLLocationDistance>
latitud y longitud y mapView ajustará el nivel de zoom a sus valores.fuente
Basado en la gran respuesta de @ AdilSoomro . Se me ocurrió esto:
fuente
Espero que el siguiente fragmento de código te ayude.
Puede elegir cualquier valor en lugar de 0,5 para reducir o aumentar el nivel de zoom. He utilizado estos métodos al hacer clic en dos botones.
fuente
Una respuesta de Swift 2.0 que utiliza NSUserDefaults para guardar y restaurar el zoom y la posición del mapa.
Función para guardar la posición del mapa y el zoom:
Ejecute la función cada vez que se mueva el mapa:
Función para guardar el zoom y la posición del mapa:
Agregue esto para viewDidLoad:
fuente
Sé que esta es una respuesta tardía, pero solo quería abordar el problema de configurar el nivel de zoom yo mismo. La respuesta de goldmine es excelente, pero descubrí que no funciona lo suficientemente bien en mi aplicación.
En una inspección más cercana, goldmine afirma que "las líneas de longitud están separadas por igual en cualquier punto del mapa". Esto no es cierto, de hecho son las líneas de latitud que están espaciadas equitativamente desde -90 (polo sur) a +90 (polo norte). Las líneas de longitud están espaciadas en su punto más ancho en el ecuador, convergiendo a un punto en los polos.
La implementación que he adoptado es, por lo tanto, usar el cálculo de latitud de la siguiente manera:
Espero que te ayude en esta última etapa.
fuente
Rápido:
locValue es su coordenada.
fuente
Aquí, pongo mi respuesta y funciona para Swift 4.2 .
MKMapView centrar y acercar
fuente
Basado en la respuesta de quentinadam
Swift 5.1
fuente
MKMapView
extensión basada en esta respuesta (+ precisión de nivel de zoom de punto flotante):fuente