showsUserLocation возвращает пин-код вместо синей точки в симуляторе iPhone - PullRequest
4 голосов
/ 05 декабря 2009

Это мой -mapView:viewForAnnotation метод, который сбрасывает булавки, когда я создаю аннотации. Но когда я устанавливаю mapView.showsUserLocation = YES; в -viewDidLoad, на бесконечном цикле (как ожидается - в симуляторе) мне выпадает пин, а не нормальная синяя точка.

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
     MKAnnotationView *anno = nil;
     //create a pin annotation view
MKPinAnnotationView  *pin=[[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"]autorelease];

    [pin setPinColor:MKPinAnnotationColorRed];
    pin.animatesDrop=YES;
    pin.canShowCallout = YES;
    pin.calloutOffset = CGPointMake(-5, 5);
    anno = pin;
    return anno;
}

Как я могу заставить его сбросить булавки и показать синюю точку?

Спасибо

Ответы [ 3 ]

24 голосов
/ 05 декабря 2009

Действительно легко исправить, хотя не уверен, что это правильный способ сделать это ...

if (annotation == mapView.userLocation){
    return nil; //default to blue dot
}
0 голосов
/ 03 августа 2010

Часто вы используете свой собственный класс аннотаций для поиска информации, связанной с аннотацией. В этом случае, чтобы обрабатывать только свои собственные аннотации, используйте что-то вроде

if ([annotation isKindOfClass:[MapLocation class]]) {}
0 голосов
/ 06 декабря 2009

Как и в другом ответе, вот что-то близкое:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{
    NSString *annotationType = [NSString stringWithCString:object_getClassName(annotation)];
    if ([annotationType compare:@"NSKVONotifying_MKUserLocation"] == 0)
        return nil;
    ...
}

Конечно, используйте что-то подобное на свой страх и риск. Завтра он может перестать работать, если Apple решит сменить это имя.

...