MKPinAnnotationView自定义图像被带有动画下落的图钉替换

时间:2012-05-08 15:08:40

标签: objective-c ios mkmapview mkpinannotationview

我在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;
}

2 个答案:

答案 0 :(得分:35)

如果您想将自己的图片用于注释视图,最好创建常规MKAnnotationView而不是MKPinAnnotationView

由于MKPinAnnotationViewMKAnnotationView的子类,因此它具有image属性,但它通常(通常在您不期望它时)忽略它并显示其内置引脚而不是图像。

因此,最好不要使用普通的MKAnnotationView

不使用MKPinAnnotationView而丢失的大事是内置掉落动画,您必须手动实现。

有关详细信息,请参阅此前一个答案:
MKMapView: Instead of Annotation Pin, a custom view

答案 1 :(得分:3)

如果您遇到此问题并且确定自己是MKAnnotationView而不是MKPinAnnotationView,请确保您的MKMapView代表财产尚未归类nilled。