• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - MapKit 中 MKMarkerAnnotationView 的彩色图像

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:33:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在为 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
}



Best Answer-推荐答案


当你打电话时

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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap