我想在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开发的新手,这是我找到的唯一方法。
有谁知道更快的方式?也许使用自定义视图或什么?
答案 0 :(得分:0)
我建议看看CAShapeLayer
,它通常很快,但我不能说它在你的情况下是否优于UIGraphicsImageRenderer
。我的猜测是它会,因为它也会根据需要进行缩放,因此无需创建大图像。
如果您不熟悉图层,它们就像是视图,但它们没有用户输入部分。它们易于使用,因为每个UIView
实际上都有.layer
的渲染,也可以用作图层父级。
要使图层与视图一起使用,只需将其作为子图层添加到视图图层属性中,然后确保它具有正确的大小。通过使用图层.contentsGravity
或在视图layoutSubviews
中手动设置图层来确定图层大小的最佳方法。