Parece que tengo el problema opuesto al de muchos de los publicados aquí acerca de MKMapView
. En lugar de no poder acercarlo y mostrar la ubicación actual, parece que no puedo obtenerlo en detener. Esto es lo que sucede:Cómo evitar que MKMapView vuelva a enfocar y volver a centrar continuamente en la ubicación del usuario
- pongo en marcha la aplicación
- El MKMapView muestra mi ubicación con un punto azul
- i zoom hacia fuera y lejos en el mapa usando los dedos
- Después de unos segundos, el MKMapView de repente se amplía de nuevo a centro de mi ubicación actual de nuevo
he intentado decirle a mi CLLocationManager
-stopUpdatingLocation
(ningún efecto, ya que un MKMapView
sabe cómo utilizar CoreLocation
), y he intentado decirle MKMapView
a setShowsUserLocation:NO
(no se muestra ningún punto azul, que no es lo que quiero). Incluso intenté eliminar mi CLLocationManager
(sin efecto). ¿Qué está causando esto y cómo lo detengo?
Sí, he puesto la precisión y la distancia a la gerente de locación en -loadView
.
No implemento -mapViewDidFinishLoadingMap
:. Aquí está mi aplicación de
-locationManager:didUpdateToLocation:fromLocation:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
// How many seconds ago was this new location created?
NSTimeInterval t = [[newLocation timestamp] timeIntervalSinceNow];
// CLLocationManagers will return the last found location of the device first,
// you don't want that data in this case. If this location was made more than 3
// minutes ago, ignore it.
if (t < -180)
{
// This is cached data, you don't want it, keep looking
return;
}
[locationManager stopUpdatingLocation];
}
Creo que este es el que está centrado preguntar sobre, @Anna Karenina:
- (void)mapView:(MKMapView *)mv didUpdateUserLocation:(MKUserLocation *)u
{
CLLocationCoordinate2D loc = [u coordinate];
// Display the region 500 meters square around the current location
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 500, 500);
[mv setRegion:region animated:YES];
}
¿Dónde haces el centrado? En 'mapView: didUpdateUserLocation:'? ¿Puedes publicar ese código? – Anna
Se llamará al método didUpdateUserLocation cada vez que cambie la ubicación del usuario o se obtenga una nueva lectura. Puede agregar un bool ivar que pueda verificar/establecer en el método para que el centrado se realice solo una vez _OR_ puede centrarse de manera condicional en u.location.horizontalAccuracy o u.location.timestamp. – Anna
Ok, eso tiene sentido, pero ... ahora tengo -mapView: didUpdateUserLocation: centrando condicionalmente si u.location.horizontalAccuracy es> locationManager.desiredAccuracy y todavía está sucediendo. Si reverso la condición, no obtengo un zoom inicial. – DJHoward