我想做的是将谷歌地图标记设置为仅我从 firebase 下载的 UIImage。目前这是我的代码:
if let downloadedImage = UIImage(data: data!) {
let markerImageView: UIImageView? = nil
markerImageView?.image = downloadedImage
print(markerImageView?.image)
markerImageView?.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
markerImageView?.layer.borderWidth = 1.0
markerImageView?.layer.masksToBounds = false
markerImageView?.layer.borderColor = UIColor.white.cgColor
markerImageView?.layer.cornerRadius = (markerImageView?.frame.size.width)! / 2
markerImageView?.clipsToBounds = true
let actualFinalImage = markerImageView?.image
marker.icon = actualFinalImage
}
我知道我正在从 firebase 获取图像并且该部分正在工作。但是,我认为问题出在这部分: letmarkerImageView: UIImageView? = nil
我认为将其设置为 nil 与标记图标冲突,这就是为什么这不起作用。但是,如果我取出 nil 部分,则会收到一条错误消息,指出在初始化markerImageView 之前我无法对其进行编辑。
如有任何帮助,我们将不胜感激!
最佳答案
更容易。我制作了一个 UIImage 扩展,可以将任何图像转换为圆形。 而不是仅仅调用该函数。
extension UIImage {
func circularImage(_ radius: CGFloat) -> UIImage? {
var imageView = UIImageView()
if self.size.width > self.size.height {
imageView.frame = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.width)
imageView.image = self
imageView.contentMode = .scaleAspectFit
} else { imageView = UIImageView(image: self) }
var layer: CALayer = CALayer()
layer = imageView.layer
layer.masksToBounds = true
layer.cornerRadius = radius
UIGraphicsBeginImageContext(imageView.bounds.size)
layer.render(in: UIGraphicsGetCurrentContext()!)
let roundedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return roundedImage
}
}
所以当你声明 gmsmarker 时就这样做
func downloadGMSMarkerImage(url: URL,marker : GMSMarker) {
print("Download Started")
getDataFromUrl(url: url) { data, response, error in
guard let data = data, error == nil else { return }
print(response?.suggestedFilename ?? url.lastPathComponent)
print("Download Finished")
DispatchQueue.main.async() {
let pinImage = UIImage(data: data)
let size = CGSize(width: 44, height: 44)
UIGraphicsBeginImageContext(size)
pinImage!.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
marker.icon = resizedImage?.circularImage(22)//call function if want the image cirle
}
}
}
和 你会得到像这样的结果
关于ios - 谷歌地图标记图标为带边框的圆形图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43309563/