Jak wyświetlić lokalizację użytkownika w mapkit?

głosy
3

Chciałbym, aby wyświetlić niebieską pulsujący punkt dla lokalizacji użytkownika. Robię to:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation    *)newLocation fromLocation:(CLLocation *)oldLocation{
//some other stuff here
[self.mapView setShowsUserLocation:YES];
}

Ale w końcu dostać

-[MKUserLocation establishment]: unrecognized selector sent to instance 0x125e90

Powinienem robić to w jakiś inny sposób?

-- EDYTOWAĆ --

Jestem również robi to, co jest gdzie I w końcu dostać się wyżej wyjątek:

- (MKAnnotationView *) mapView:(MKMapView *)_mapView viewForAnnotation:(AddressNote *) annotation{

if(annotation.establishment != nil){
//do something}

zakład jest klasą zwyczaj mam na AddressNote. Kiedy zakład ma wartość, wyjątek występuje. Jeśli nie ustawić ShowsUserLocation, wszystko działa dobrze, ale oczywiście, nie widzę lokalizację użytkownika.

Utwórz 14/03/2010 o 20:02
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
15

Kiedy viewForAnnotationjest wymagana, trzeba sprawdzić, czy nie pogoda dana adnotacja odpowiada bieżącej lokalizacji użytkownika. Jeśli tak, to powrót nil, w przeciwnym razie zwraca swoją normalną annoationView.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation {
    if (annotation==self.mapView.userLocation)
        return nil;
    //then the rest of your code for all your 'classic' annotations.

[EDIT] alternatywnym sposobem jest sprawdzenie rodzaju klasy z adnotacją:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation {
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;
    //then the rest of your code for all your 'classic' annotations.

Odpowiedział 16/03/2010 o 10:05
źródło użytkownik

głosy
8

Nie wiesz, co rzeczywisty problem, ale nie trzeba tego robić na każdej aktualizacji. Ustawić go raz po utworzeniu mapView, i powinieneś być w biznesie.

mapView.showsUserLocation = YES;

może być konieczne, aby powiększyć mapę do regionu, w którym użytkownik jest rzeczywiście, bo kropka być widoczne.

Odpowiedział 14/03/2010 o 20:07
źródło użytkownik

głosy
0

Używasz niewłaściwy sposób delegata. Dla MapView, należy użyć tej metody delegata złapać lokalizację użytkownika:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
}
Odpowiedział 05/05/2011 o 00:49
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more