我正在为 iOS 构建一个应用程序,允许用户基于位置存储图像。
现在我想为此使用 iOS 中最新的 AnnotationView
(MKMarkerAnnotationView
),因为它提供了自动集群。
我的问题是,这个类需要一个 glyphTintColor
,如果没有提供,它被设置为 UIColor().red
。 iOS 使用此颜色为整个图像着色。之后图像只有这种颜色。
我尝试将 glyphTintColor
设置为 nil
但这会导致图像变成红色。我还尝试将其设置为 UIColor(red:1.00, green:1.00, blue:1.00, alpha:0.0)
但之后图像消失了,您只能看到标记本身。
我希望标记以其原始颜色而不是单一颜色显示图像。
谁能帮我解决这个问题?
这是我的完整代码:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
let identifier = "inAnnotationIdentifier"
var pinView = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: identifier)
pinView?.annotation = annotation
pinView?.clusteringIdentifier = "clusterId"
pinView?.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
pinView?.canShowCallout = false
pinView?.glyphImage = UIImage(named: "image")
return pinView
}
当你打电话时
pinView?.glyphImage = UIImage(named: "image")
pinView
调用
glyphImage?.withRenderingMode(.alwaysTemplate)
这提供了一种解决问题的简单方法:只需重写 withRenderingMode
:
import UIKit
class OriginalUIImage: UIImage {
convenience init?(named name: String) {
guard let image = UIImage(named: name),
nil != image.cgImage else {
return nil
}
self.init(cgImage: image.cgImage!)
}
override func withRenderingMode(_ renderingMode: UIImage.RenderingMode) -> UIImage {
// both return statements work:
return self
// return super.withRenderingMode(.alwaysOriginal)
}
}
现在你可以使用
pinView?.glyphImage = OriginalUIImage(named: "image")
关于ios - MapKit 中 MKMarkerAnnotationView 的彩色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48092900/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) | Powered by Discuz! X3.4 |