MapKit自定义标注时蓝点不可见

3

当我使用自定义注释时,无法看到蓝色的当前位置点。

- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id<MKAnnotation> ) annotation {

    MKAnnotationView *customAnnotationView=[[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil] autorelease];

    UIImage *pinImage = [UIImage imageNamed:@"ann.png"];
    [customAnnotationView setImage:pinImage];

    customAnnotationView.canShowCallout = YES;
                                                                                                 
    //UIImageView *leftIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ann.png"]];
    //customAnnotationView.leftCalloutAccessoryView = leftIconView;

    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
    customAnnotationView.rightCalloutAccessoryView = rightButton;

    return customAnnotationView;
}

如果您有很多注释并且/或用户不断在地图上移动,那么不重复使用注释将导致显著的内存浪费。 - Matthew Frederick
3个回答

8
if (annotation == map.userLocation) {
        return nil;
    }

添加这个:d

2
我现在知道答案了。只需要在上面的代码末尾添加以下几行,就在return customAnnotationView;之前:

if (annotation == mapView.userLocation) {
NSLog(@"nil"); return nil; }

谢谢 :)


1
如果你要这样做,不要把它放在底部,而是放在顶部。你不想在一个无法使用的注释上进行所有这些处理。此外,你绝对不需要记录“nil”。 - Matthew Frederick

1

当前用户位置的“蓝点”的可见性与自定义注释无关。要显示用户的当前位置,您需要将MKMapViewshowsUserLocation属性设置为YES。例如:

yourMapView.showsUserLocation = YES;

或者:

[yourMapView showsUserLocation] = YES;

了解到MapKit在显示当前用户位置时存在一个小问题:在模拟器中,UserLocation始终是美国加利福尼亚库比蒂诺的苹果总部。但在设备上则可以正常工作。


编辑添加:

正如Terente所指出的那样,您必须小心不要“吃掉”用户的位置注释,因此必须测试以查看您正在处理的注释是否为用户的位置。我用以下逻辑包装逻辑:

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

}

这里的 MapLocation 是我的注解类。


我已经完成了。但是我没有看到蓝点。我按照下面的帖子所述做了,现在我得到了它。谢谢。 - user582835
+1 提到模拟器使用Cupertino作为UserLocation的位置... :) - Prine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接