iOS开发:MKMarkerAnnotationView如何显示原图色彩而非单色?
解决MKMarkerAnnotationView显示原始图片色彩的问题
嘿,我之前也碰到过一模一样的困扰!MKMarkerAnnotationView的glyphImage默认会被glyphTintColor着色——哪怕你没显式设置这个属性,系统也会用红色作为默认值处理图片,直接把原图变成单一色调。
核心解决方案
要让图片显示原始色彩,关键是修改图片的渲染模式为.alwaysOriginal,这样系统就不会对图片应用任何着色效果了。具体做法是在设置glyphImage时,调用withRenderingMode(.alwaysOriginal)方法:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { if annotation is MKUserLocation { return nil } let identifier = "PinAnnotationIdentifier" 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")?.withRenderingMode(.alwaysOriginal) return pinView }
为什么之前的尝试没用?
- 把
glyphTintColor设为nil:系统会自动 fallback 到默认的红色作为着色值,所以图片还是会被染成红色。 - 设置透明色
UIColor(red:1.00, green:1.00, blue:1.00, alpha:0.0):相当于把图片整体染成完全透明,自然就看不到原图了。
这个方法既能保留图片的原始色彩,还不会影响MKMarkerAnnotationView本身的聚类功能和标记样式,刚好适配你的需求~
内容的提问来源于stack exchange,提问作者Mojo
相关产品推荐
相关产品推荐

