如何制作自定义引脚并一起使用FollowWithHeading模式?

时间:2014-04-08 20:40:41

标签: ios gps annotations mapkit mkusertrackingmode

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

- (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模式?

..抱歉,我不能很好地使用英语。

1 个答案:

答案 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;
}