问题描述
首先,我遇到了iOS 14附带的问题。旧版本没有这样的问题。
当我从地图上的图钉中进行选择时,我更改了图钉的图像,并抛出了橙色图片。进行此分配时,我看到了在iOS 14设备上进行此更改期间在应用程序中使用的一些资产。
首次出现:
选择图钉的时间:
选择图钉后:
选择图钉后,资产不会正常显示,则直接选择了图钉。现在,这种情况介入了。
我在地图上的图钉点击情况下使用的代码如下
func mapView(_ mapView: MKMapView,didSelect view: MKAnnotationView) {
view.image = UIImage(named: "pin_selected")
}
func mapView(_ mapView: MKMapView,diddeselect view: MKAnnotationView) {
view.image = UIImage(named: "pin")
}
这种情况会在几秒钟内消失,但是我该如何解决这个问题?
解决方法
我遇到了同样的问题,经过很多努力后,我意识到这是图像问题。当注释在状态之间设置动画时,图像中的一些剩余元数据可能会引起问题。我所做的是使注释的图像再次从设计中导出并在项目中替换,从而解决了问题。
,也遇到了这个问题。对我有用的解决方法是将图像放入Sprite Atlas中:在Xcode中选择资产库,按左下方的+按钮,选择New Sprite Atlas,然后将资产库中的图像拖到Sprites文件夹中。
对我来说,问题仅发生在小型PNG图片上。 JPEG或大型PNG(我尝试256x256并按比例缩小)似乎工作正常。但是,我最终使用了上述解决方法,因为小型PNG非常适合这些地图图钉图标。我测试的设备运行的是iOS 14.0.1。
,我遇到了同样的问题,但是我在iOS 14.3的Beta版上进行了测试,该问题不再发生。
,我在此处看到的已记录问题以及解决方法。显示与切换图像和使用资产目录时完成的动画有关。
https://github.com/abotkin/FB8708184
,我找到了解决方案
/// Pin image
func pinImageView(pinImage: UIImage) -> UIImage? {
/// Create canvas
let scale = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(CGSize(width: 40,height: 40),false,scale)
let currentContext = UIGraphicsGetCurrentContext()!
currentContext.saveGState()
/// Add pin image
let imageRect = CGRect(x: 0,y: 0,width: 40,height: 40)
pinImage.draw(in: imageRect)
/// Generate new image
let img = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return img
}
func mapView(_ mapView: MKMapView,didSelect view: MKAnnotationView) {
view.image = pinImageView(pinImage: UIImage(named: "pin_selected"))
}
func mapView(_ mapView: MKMapView,didDeselect view: MKAnnotationView) {
view.image = pinImageView(pinImage: UIImage(named: "pin"))
}
从源图钉图像设置宽度和高度,在我的例子中,图钉图像是 40x40