0

下面的代码是显示自定义引脚(图片为引脚)。它可以正常使用。

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

   PVAttractionAnnotationView *annotationView = [[PVAttractionAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Attraction"];
   annotationView.canShowCallout = YES;
   return annotationView;

}

然后使用以下代码显示当前位置

[self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];

XCODE 跳转到 main.m 并显示

线程1:信号SIGABRT

另一方面,如果我使用以下代码

[self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];

并未使用以下所有代码

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

   PVAttractionAnnotationView *annotationView = [[PVAttractionAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Attraction"];
   annotationView.canShowCallout = YES;
   return annotationView;

}

应用程序将正常显示当前位置,但不显示自定义引脚。它显示了系统默认的红色引脚,因为我没有使用该代码。

我怎样才能FollowWithHeading一起制作自定义引脚和使用模式?

..对不起,我英语不好。

4

1 回答 1

1

您需要稍作更改,以viewForAnnotation检查注释的类并返回适当的视图。通过返回 nil,系统将使用默认视图。您还需要一些额外的代码来正确实现视图重用 -

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKAnnotationView *annotationView=nil;
    if ([annotation isKindOfClass:[PVAttractionAnnotation class]])  // Note - put your custom annotation class here
    {
        annotationView =(MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"Attraction"];
        if (annotationView == nil)
        {
            annotationView = [[PVAttractionAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Attraction"];  
            annotationView.canShowCallout = YES; 
        }
        else
        {
            annotationView.annotation=annotation;
        }

    }
    return annotationView;
}
于 2014-04-08T21:56:57.823 回答