【发布时间】:2018-08-09 14:10:24
【问题描述】:
我想在我的 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 开发新手,这是我找到的唯一方法。
有人知道更快的方法吗?也许使用自定义视图之类的?
【问题讨论】:
-
您可以做一些事情来简化和优化代码(例如使用
addPath而不是一次重新创建一条线段的路径)但我认为更有趣的问题是您需要渲染图像的路径,或者是否有其他解决方案。你在用渲染的图像做什么?只是在 UI 中显示? -
另外,您渲染路径的图像有多大?数组中大约有多少条路径,它们有多复杂(它们每条大约包含多少行)?
-
是的,它只是显示在滚动视图中,因此可以移动和缩放。图片永远不会大于 1920x1080,并且路径不超过 10 条,每条最多 5 行