Roh*_*hth 3 google-maps uiimage ios swift
我一直在查看许多堆栈溢出的帖子,但没有一个能够给我我想要的解决方案。到目前为止,我已经能够使用 AlamoFire 获取图像并将其转换为圆形。但是,不幸的是,alamo fire 没有提供向 UIImage 添加边框的选项。我想知道是否有人可以解决我的问题。这是我将图像制作成圆形的代码:
if let downloadedImage = UIImage(data: data!) {
let markerImage = downloadedImage
let markerImageSize = CGSize(width: 50, height: 50)
let markerImageFilter = AspectScaledToFillSizeCircleFilter(size: markerImageSize)
let finalMarkerImage = markerImageFilter.filter(markerImage)
marker.icon = finalMarkerImage
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我能够得到一个圆圈,但不能得到一个带边框的圆圈。到目前为止,我已经尝试了许多堆栈溢出后期解决方案来尝试使用我的 AlamoFire 解决方案。以下是一些帖子: 将 UIImage 制作成圆形
这是我目前拥有的:
这是我想要的:
任何帮助将非常感激。谢谢!
我建议您应该将所需的外观应用于包含您的 UIImage的UIImageView,如下所示:
imageView.layer.cornerRadius = imageView.frame.size.width / 2
imageView.layer.masksToBounds = true
imageView.layer.borderWidth = 2
imageView.layer.borderColor = UIColor.brown.cgColor
Run Code Online (Sandbox Code Playgroud)
更新:
由于您正在使用 Google Maps ( GMSMarker),您应该以编程方式创建一个 UIImageView(将上面的代码片段应用于它)并将其添加到您的标记中iconView,如下所示:
marker.iconView = imageView
Run Code Online (Sandbox Code Playgroud)
所以,它应该类似于:
// of course the values of the width/height (size) is up to you
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
imageView.layer.cornerRadius = imageView.frame.size.width / 2
imageView.layer.masksToBounds = true
imageView.layer.borderWidth = 2
imageView.layer.borderColor = UIColor.white.cgColor
// set your image
imageView.image = ...
marker.iconView = imageView
Run Code Online (Sandbox Code Playgroud)
这应该创建带有白色边框的圆形图像......
func round(image: UIImage) -> UIImage {
let imageWidth = image.size.width
let imageHeight = image.size.height
let diameter = min(imageWidth, imageHeight)
let isLandscape = imageWidth > imageHeight
let xOffset = isLandscape ? (imageWidth - diameter) / 2 : 0
let yOffset = isLandscape ? 0 : (imageHeight - diameter) / 2
let imageSize = CGSize(width: diameter, height: diameter)
return UIGraphicsImageRenderer(size: imageSize).image { _ in
let ovalPath = UIBezierPath(ovalIn: CGRect(origin: .zero, size: imageSize))
ovalPath.addClip()
image.draw(at: CGPoint(x: -xOffset, y: -yOffset))
UIColor.white.setStroke()
ovalPath.lineWidth = diameter / 50
ovalPath.stroke()
}
}
Run Code Online (Sandbox Code Playgroud)
然后
let roundImage = round(image: downloadedImage)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2374 次 |
| 最近记录: |