Sí, puede tener una vista personalizada para la ubicación del usuario.
Desafortunadamente, es más difícil de implementar de lo que debería porque aunque el documentation for the viewForAnnotation delegate method afirma que puede proporcionar su propia vista si la clase de anotación es MKUserLocation
, la vista personalizada no se mueve con la ubicación del usuario. De hecho, cuando se devuelve una vista personalizada para MKUserLocation
, la vista de mapa deja de actualizar por completo la ubicación del usuario (el método delegado de la vista de mapa didUpdateUserLocation
ya no se dispara). Creo que esto es un error.
Una solución consiste en utilizar CLLocationManager
y una anotación personalizada ...
Asegúrese showsUserLocation
es NO
o sin control en la vista del mapa.
Declare propiedades para CLLocationManager
y una anotación personalizada utilizando una clase personalizada que implementa el protocolo MKAnnotation
(o puede usar la clase genérica MKPointAnnotation
).
En viewDidLoad
o en algún otro lugar apropiado, cree CLLocationManager
, configure su delegate
y llame al startUpdatingLocation
.
En el location manager's didUpdateToLocation
delegate method (no método didUpdateUserLocation
delegado de la vista del mapa), crear o actualizar su anotación personalizada:
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if (myUserLocAnnot == nil)
{
self.myUserLocAnnot = [[[MyUserLocClass alloc] init] autorelease];
//remove the autorelease if using ARC
myUserLocAnnot.title = @"You are here";
myUserLocAnnot.coordinate = newLocation.coordinate;
[mapView addAnnotation:myUserLocAnnot];
}
else
{
myUserLocAnnot.coordinate = newLocation.coordinate;
}
}
Por último, en el método delegado de la vista del mapa viewForAnnotation
, que se obtendrá una vista de anotación personalizada si la anotación es su anotación de ubicación de usuario personalizada.
enfrentamos el mismo problema, tal vez podemos plantear un error a la manzana – darshansonde
Gracias Anna, está trabajando ahora. Incluso sospecho que hay un error en la vista de mapa que no aparece en nuestra vista de anotación personalizada para la ubicación del usuario cuando lo configuramos. – nkd
Pero un problema más que estoy enfrentando aquí es que, tan pronto como inicie la actualización de la ubicación, recibo la llamada a locationManager: didUpdateToLocation: fromLocation method donde creo la anotación y la agrego al mapa, pero el mapa no muestra mi vista personalizada, incluso aunque estoy devolviendo la vista personalizada. Si apago la ubicación y la ubicación, funciona. ¿Hay algún problema aquí? – nkd