在didAddAnnotation中更改添加的MKAnnotationView alpha会影响屏幕上的所有MKAnnotationViews

时间:2014-02-04 00:39:21

标签: ios mkmapview mkannotation mkannotationview

我试图通过动画淡化我的注释,所以我用alpha为0创建它们,然后在didAddAnnotation中将它们的alpha动画设为1。有时我只添加一些注释,减去其他注释,但是现在,当添加任何内容而不是预期的行为时,屏幕上的每个注释都会逐渐消失,这就是只有最近添加的引脚会淡化为1。

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views{

for (MKAnnotationView *view in views){

        if (view.alpha ==0){

            [UIView animateWithDuration:.5 animations:^{

                view.alpha = 1;

            }];
        }

}

1 个答案:

答案 0 :(得分:1)

要将注释设置为已添加的动画,您可以使用此MKAnnotationView

的子类
class AnnotationView: MKAnnotationView {

    override var annotation: MKAnnotation? {
        didSet {
            UIView.animate(withDuration: 0.5) { self.alpha = 1.0 }
        }
    }

    override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
        super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
        self.alpha = 0
    }

    override func prepareForReuse() {
        super.prepareForReuse()

        self.alpha = 0.0
    }

}

用法:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if let view = mapView.dequeueReusableAnnotationView(withIdentifier: "annot") as? AnnotationView {
        return view
    }

    return AnnotationView(annotation: annotation, reuseIdentifier: "annot")
}