Pokazać aktualną lokalizację użytkownika za pomocą MKMapView?


Próbuję pokazać aktualną lokalizację użytkownika, ustawiając właściwość
MKMapView
, czyli
setShowsUserLocation
na
YES
. Domyślnie strzałka pojawia się w lewym górnym rogu ekranu iPhone'a, gdy aplikacja zaczyna aktualizować lokalizację użytkownika. Ale po pokazaniu aktualnej lokalizacji strzałka powinna zniknąć, ale nadal jest obecna, dopóki aplikacja jest uruchomiona, co oznacza, że ​​aplikacja nadal aktualizuje lokalizację w tle? więc jak mogę przestać aktualizować moją aktualną lokalizację? Zaimplementowałem delegata, który jest natychmiast wywoływany ..
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli mapa jest widoczna, a parametr showUserLocation ma wartość YES, nadal jest aktualizowana w tle.
Musisz wyczyścić to ustawienie, gdy widok znika lub gdy aplikacja przechodzi w tło. Najlepszym sposobem byłoby prawdopodobnie zarejestrowanie swojego viewController, aby otrzymywać powiadomienia dla
UIApplicationDidEnterBackgroundNotification
i
UIApplicationDidBecomeActiveNotification
.
- (void)viewDidLoad{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appToBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appReturnsActive) name:UIApplicationDidBecomeActiveNotification object:nil];
}

Następnie w metodzie wywoływanej przez to powiadomienie zmień właściwości widoku mapy względem
userLocation
:
- (void)appToBackground{
[mapview setShowsUserLocation:NO];
}

I
- (void)appReturnsActive{
[mapview setShowsUserLocation:YES];
}

Upewnij się, że te metody są rzeczywiście wywoływane, ustawiając tam punkt przerwania i powracając do ekranu głównego.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zgadzam się z Michaelem Kernahanem, jestem prawie pewien, że w
MKMapView
istnieje sytuacja rasowa.
MKMapView
wydaje się próbować samodzielnie usunąć
userLocationAnnotation
(niebieska kropka), gdy tylko zorientuje się, że utracił dostęp do usług lokalizacyjnych.
Jednak nie wydaje się to bezpieczne, a jeśli programista wydaje również
[mapView setShowsUserLocation: NO]
, jest bardzo prawdopodobne, że wystąpi awaria z powodu wyścigu między wewnętrznym
MKMapView
wątek próbujący usunąć
userLocationAnnotation
i wątek wywołujący
setShowsUserLocation: NO
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz zatrzymać aktualizację lokalizacji, wysyłając wiadomość do menedżera lokalizacji
[self.locationManager stopUpdatingLocation];
Jeśli chodzi o Twój przypadek, czy próbowałeś przestać pokazywać lokalizację użytkowników?

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się