10

我在 MapView 上显示用户头像图像。如果化身在没有动画的情况下渲染,它们似乎正在工作,但是我想为它们的下落设置动画。如果我将 pinView.animatesDrop 设置为 true,那么我会丢失头像并被 pin 替换。如何在不使用图钉的情况下为我的头像设置动画?

这是我正在使用的 viewForAnnotation 方法:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    MKPinAnnotationView* pinView = (MKPinAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"MyAnnotation"];

    if (!pinView) {
        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotation"];
    }
    else
        pinView.annotation = annotation;

    //If I set this to true, my image is replaced by the pin
    //pinView.animatesDrop = true;

    //I'm using SDWebImage
    [pinView setImageWithURL:[NSURL URLWithString:@"/pathtosomeavatar.png"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

    //Adding a nice drop shadow here
    pinView.layer.shadowColor = [UIColor blackColor].CGColor;
    pinView.layer.shadowOffset = CGSizeMake(0, 1);
    pinView.layer.shadowOpacity = 0.5;
    pinView.layer.shadowRadius = 3.0;

    return pinView;
}
4

2 回答 2

35

当您想将自己的图像用于注释视图时,最好创建常规MKAnnotationView而不是MKPinAnnotationView.

由于MKPinAnnotationView它是 的子类MKAnnotationView,因此它有一个image属性,但通常(通常在您不期望它时)会忽略它并改为显示其内置的 pin 图像。

因此,与其与之抗争,不如使用普通的MKAnnotationView.

不使用的最大损失MKPinAnnotationView是您必须手动实现的内置拖放动画。

有关更多详细信息,请参阅此先前的答案:
MKMapView:自定义视图而不是注释引脚

于 2012-05-17T17:45:56.847 回答
3

如果您遇到此问题并且确定您MKAnnotationView不是MKPinAnnotationView,请确保您MKMapView的委托属性没有被取消。

于 2013-12-11T17:53:22.317 回答