Tak, możesz mieć niestandardowy widok dla lokalizacji użytkownika.
Niestety, jest to trudniejsze do wykonania niż powinno być, bo choć documentation for the viewForAnnotation delegate method twierdzi, że można po prostu podać swój własny pogląd, jeśli klasa adnotacja jest MKUserLocation
, widok niestandardowy nie wtedy nadal poruszać z lokalizacji użytkownika. W rzeczywistości, po zwróceniu niestandardowego widoku dla MKUserLocation
, widok mapy przestaje całkowicie aktualizować lokalizację użytkownika (metoda delegowania mapy widoku mapy nie jest już uruchamiana). Wierzę, że to błąd.
Rozwiązaniem jest użycie CLLocationManager
i niestandardowego adnotacji ...
Upewnij showsUserLocation
jest NO
lub zaznaczone na widoku mapy.
stwierdzenie właściwości dla CLLocationManager
i niestandardowego adnotacji przy użyciu niestandardowej klasy, która implementuje protokół MKAnnotation
(lub może po prostu użyć rodzajowego MKPointAnnotation
klasę).
W viewDidLoad
lub inne odpowiednie miejsce, stworzyć CLLocationManager
, ustawić jego delegate
i nazywają startUpdatingLocation
.
W location manager's didUpdateToLocation
delegate method (nie metoda didUpdateUserLocation
delegat widoku mapy'S), utworzyć lub zaktualizować niestandardowe adnotacji:
-(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;
}
}
Wreszcie w viewForAnnotation
metody delegata widoku mapy, w ty wróci niestandardowego widoku adnotacji jeśli adnotacja jest adnotacją lokalizacji użytkownika niestandardowego.
w obliczu tego samego problemu, może możemy podnieść błąd na jabłko – darshansonde
Dzięki Anna, działa już teraz. Nawet podejrzewam, że istnieje błąd w widoku mapy, który nie pokazuje naszego niestandardowego widoku adnotacji dla lokalizacji użytkownika po jej ustawieniu. – nkd
Jeszcze jeden problem, który mam tutaj do czynienia, to, jak tylko uruchomię aktualizację lokalizacji, otrzymam wywołanie z powrotem do usługi locationManager: didUpdateToLocation: fromLocation, w której utworzę adnotację i dodaję ją do mapy, ale mapa nie pokazuje mojego niestandardowego widoku nawet chociaż zwracam niestandardowy widok. Jeśli wyłączę lokalizację i lokalizację, zadziała. Czy jest tu jakiś problem? – nkd