Cum de a afișa locația utilizatorului în mapkit?

voturi
3

Aș vrea să afișeze punctul pulsând albastru pentru locația unui utilizator. Fac acest lucru:

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

Dar, în cele din urmă am obține

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

Ar trebui să mă fac asta un alt mod?

-- EDITAȚI | × --

Sunt, de asemenea, fac acest lucru, care este în cazul în care am ajunge în cele din urmă excepția de mai sus:

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

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

unitate este o clasă personalizată am pe AddressNote. Atunci când o unitate are valoare, are loc o excepție. Dacă nu stabilesc ShowsUserLocation, totul funcționează bine, dar, desigur, eu nu văd locația utilizatorului.

Întrebat 14/03/2010 la 20:02
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
15

În cazul în care viewForAnnotationeste solicitată, trebuie să verificați sau nu batal dat adnotarea corespunde locației utilizatorului curent. Dacă da, întoarce zero, în caz contrar reveni propriul annoationView normal.

- (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] o modalitate alternativă este de a verifica tipul clasei adnotării:

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

Publicat 16/03/2010 la 10:05
sursa de către utilizator

voturi
8

Nu sunt sigur ce problema reală este, dar nu trebuie să faceți acest lucru la fiecare actualizare. Setați - o dată după crearea mapView, și ar trebui să fie în afaceri.

mapView.showsUserLocation = YES;

Poate fi necesar pentru a mări harta regiunii în care utilizatorul este de fapt, pentru punctul să fie vizibil.

Publicat 14/03/2010 la 20:07
sursa de către utilizator

voturi
0

În prezent utilizați metoda delegat greșit. Pentru mapview, ar trebui să utilizați această metodă pentru a prinde delegat locația utilizatorului:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
}
Publicat 05/05/2011 la 00:49
sursa de către utilizator

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