Come visualizzare la posizione dell'utente in MapKit?

voti
3

Mi piacerebbe per visualizzare il punto pulsante blu per la posizione di un utente. Sto facendo questo:

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

Ma alla fine ho capito

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

Dovrei fare questo in qualche altro modo?

-- MODIFICARE --

Sto anche facendo questo, che è dove ho finalmente ottengo l'eccezione di cui sopra:

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

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

istituzione è una classe personalizzata che ho su AddressNote. Quando istituzione ha un valore, l'eccezione si verifica. Se non metto ShowsUserLocation, tutto funziona bene, ma ovviamente, non visualizzare la posizione dell'utente.

È pubblicato 14/03/2010 alle 20:02
fonte dall'utente
In altre lingue...                            


3 risposte

voti
15

Quando il viewForAnnotationè richiesto, è necessario controllare che scendessimo o meno la data di annotazione corrisponde alla posizione corrente dell'utente. Se sì, nil tornare, altrimenti restituisce il proprio annoationView normale.

- (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] un modo alternativo è quello di verificare il tipo di classe della nota:

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

Risposto il 16/03/2010 a 10:05
fonte dall'utente

voti
8

Non so quale sia il problema reale è, ma non è necessario fare questo su ogni aggiornamento. Impostare una volta dopo aver creato la mapView, e si dovrebbe essere in affari.

mapView.showsUserLocation = YES;

Potrebbe essere necessario per ingrandire la mappa per la regione in cui l'utente è in realtà, per il punto sia visibile.

Risposto il 14/03/2010 a 20:07
fonte dall'utente

voti
0

Si sta utilizzando il metodo delegato sbagliata. Per mapview, si consiglia di utilizzare questo metodo delegato per prendere la posizione dell'utente:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
}
Risposto il 05/05/2011 a 00:49
fonte dall'utente

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