objective-c - MKPinAnnotationView 自定义图像替换为具有动画效果的图钉

标签 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;
}

最佳答案

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

因为 MKPinAnnotationViewMKAnnotationView 的子类,所以它有一个 image 属性,但它通常(通常是在您不期望的时候)忽略它并显示其内置的图钉图像。

因此与其对抗,不如使用普通的 MKAnnotationView

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

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

关于objective-c - MKPinAnnotationView 自定义图像替换为具有动画效果的图钉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10501341/

相关文章:

ios - 自定义 UITableViewCell 显示空白

ios - 将参数从 Storyboard传递到自定义 UIView iOS

ios - 带有 < 符号的自定义后退按钮

ios - 使用 Swift 制作可点击的 UILabel

ios - 缩小时注释消失

ios - 检测用户是否移动了 map 或者它是否以编程方式发生 iOS Mapkit

ios - 相当于 Objective-c 中的 Swift Public 方法?

objective-c - 是否可以手动遍历嵌套的 if 语句?

ios - 本地图 View 只是屏幕的一部分时,如何在 iOS 模拟器中缩小?

ios - 在 swift 中使用 AFHTTPSessionManager