开发者

showsUserLocation returns pin instead of blue dot in iPhone simulator

This is my -mapView:viewForAnnotation method 开发者_如何学Gowhich drops pins when i create annotation views. But when i set mapView.showsUserLocation = YES; in -viewDidLoad, i get a pin dropped on Infinite Loop (expected - in simulator) and not the normal blue dot.

- (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;
}

How can i get it to drop pins and show the blue dot as well?

Thanks


Really simple to fix, although unsure if this is the correct way to do it...

if (annotation == mapView.userLocation){
    return nil; //default to blue dot
}


Similar to the other answer, here's something close:

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

Of course, use something like this at your own risk. It could stop working tomorrow if Apple decided to change that name.


Often you use your own class of annotation to look up information related to the annotation. In that case, to only handle your own annotations, use something like

if ([annotation isKindOfClass:[MapLocation class]]) {}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜