Hoe maak je locatie van de gebruiker weer te geven in mapkit?

stemmen
3

Ik zou graag naar de blauwe pulserende stip voor de locatie van een gebruiker weer te geven. Ik doe dit:

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

Maar ik uiteindelijk

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

Moet ik dit doen op een andere manier?

-- BEWERK --

Ik ben ook dit te doen, dat is waar ik uiteindelijk de bovenstaande uitzondering te krijgen:

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

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

etablissement is een aangepaste klasse die ik heb op AddressNote. Bij het hotel heeft een waarde, de uitzondering optreedt. Als ik niet ShowsUserLocation ingesteld, werkt alles prima, maar natuurlijk, zie ik niet de locatie van de gebruiker.

De vraag is gesteld op 14/03/2010 om 20:02
bron van user
In andere talen...                            


3 antwoorden

stemmen
15

Wanneer het viewForAnnotationwordt gevraagd, moet u controleren al dan niet de gegeven annotatie komt overeen met de huidige locatie van de gebruiker. Zo ja, gaat u terug nil, anders wordt uw eigen normale annoationView terugkeren.

- (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] een alternatieve manier is om de aard van de klasse van de annotatie te controleren:

- (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.

antwoordde op 16/03/2010 om 10:05
bron van user

stemmen
8

Niet zeker wat het werkelijke probleem is, maar je hoeft niet om dit te doen op elke update. Zet hem een keer na het maken van de mapView, en je moet in het bedrijfsleven.

mapView.showsUserLocation = YES;

Mogelijk moet u de kaart inzoomen op de regio waar de gebruiker daadwerkelijk is, voor de stip zichtbaar is.

antwoordde op 14/03/2010 om 20:07
bron van user

stemmen
0

Je gebruikt de verkeerde afgevaardigde methode. Voor MapView, moet je deze delegeren methode gebruiken om de locatie van de gebruiker op te vangen:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
}
antwoordde op 05/05/2011 om 00:49
bron van user

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