更改出列注释视图的图像会导致先前使用的图像短暂出现

Posted

技术标签:

【中文标题】更改出列注释视图的图像会导致先前使用的图像短暂出现【英文标题】:Changing the image of a dequeued annotationview causes the image from the previous use to appear briefly 【发布时间】:2019-12-23 07:58:25 【问题描述】:

我正在编写一个在地图上显示一组缩略图的应用程序。当我需要显示一个新的缩略图时,我使用 dequeueReusableAnnotationViewWithIdentifier 将地图注释视图出队。然后我更改注释视图图像。似乎有一种动画效果,从先前使用 annotationview 使用的图像淡化到新分配的图像。有没有一种简单的方法来显示没有动画的新图像。

在:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation)

我试过了:

MKAnnotationView(annotation: 注释,reuseIdentifier: nil)

即创建一个新的注释视图,该视图在滚动离开屏幕或被应用程序删除后将不会被重用。这解决了问题,但注解视图将永远无法用于 dequeueReusableAnnotationView。出于性能原因,不建议这样做,但它可以解决我的问题!这是唯一的解决方案吗?

【问题讨论】:

【参考方案1】:

在你的 MKAnnotationView 子类中,你应该有类似的东西

override var annotation: MKAnnotation? 
    willSet 
        ...
    

如果不再需要 MKAnnotationView 实例,MapKit 会设置 annotation = nil

这是在willSet 清理对象的好时机:将图像设置为 nil,也可以将您使用的其他属性设置为 nil。

如果您这样做,则应该没有可以显示的引用图像。

【讨论】:

以上是关于更改出列注释视图的图像会导致先前使用的图像短暂出现的主要内容,如果未能解决你的问题,请参考以下文章

更改导航栏背景图像导致视图向上移动

Android - 看似无害的布局会导致应用在短暂使用后崩溃而没有任何错误

如何将图像保存到具有来自先前视图控制器的 id 的单独相册中

UIButton 图像仅更改一个按钮

启动图像和打开动画是不是会导致我的应用冻结?

单击tableview单元iphone时如何更改图像