showsUserLocation在iPhone模拟器中返回pin而不是蓝点

时间:2009-12-05 19:17:35

标签: iphone mkmapview mkpinannotationview

这是我的-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 个答案:

答案 0 :(得分:24)

修复起来非常简单,虽然不确定这是否是正确的方法......

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

答案 1 :(得分:0)

与其他答案类似,这里有一些结论:

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

当然,使用这样的东西需要您自担风险。如果Apple决定更改该名称,它可能会在明天停止工作。

答案 2 :(得分:0)

通常使用自己的注释类来查找与注释相关的信息。在这种情况下,要仅处理您自己的注释,请使用类似

的内容
if ([annotation isKindOfClass:[MapLocation class]]) {}