以下代码显示自定义引脚(图片为引脚)。它可以正常使用。
- (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
模式?
..抱歉,我不能很好地使用英语。
答案 0 :(得分: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;
}