我想在iOS应用程序中显示地图。因此,我得到了一个平面图(UIImage)并使用以下代码将路径(代表建筑物或房间)渲染到地图图像上:
static func draw(paths: [[CGPoint]], toImage image: UIImage?) -> UIImage? {
if let image = image {
let renderer = UIGraphicsImageRenderer(size: image.size)
return renderer.image { context in
image.draw(at: CGPoint(x: 0, y: 0))
context.cgContext.setFillColor(UIColor.init(white: 0.1, alpha: 0.5).cgColor)
for path in paths {
if path.count > 2 {
context.cgContext.move(to: path[0])
for point in path {
context.cgContext.addLine(to: point)
}
context.cgContext.addLine(to: path[0])
}
}
context.cgContext.drawPath(using: .fill)
}
} else {
return nil
}
}
然后将此方法的结果设置为UIImageView。但是,这需要大约两秒钟,所以太长了。
我是iOS开发的新手,这是我找到的唯一方法。
有谁知道更快的方式?也许使用自定义视图或什么?
谢谢和最好的问候,亚历克斯
我建议看看CAShapeLayer
,它通常很快,但我不能说它在你的情况下是否优于UIGraphicsImageRenderer
。我的猜测是它会,因为它也会根据需要进行扩展,因此无需创建大图像。
如果您不熟悉图层,它们就像是视图,除了它们没有用户输入部分。它们很容易使用,因为每个UIView
实际上都有一个.layer
用于渲染,也可以用作层父类。
要使图层与视图一起使用,只需将其作为子图层添加到视图图层属性中,然后确保它具有正确的大小。调整图层大小的最佳方法是使用图层.contentsGravity
或在视图layoutSubviews
中手动设置。