有没有比UIGraphicsImageRenderer更快的方式将路径渲染到UIImage上?

问题描述 投票:0回答:1

我想在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开发的新手,这是我找到的唯一方法。

有谁知道更快的方式?也许使用自定义视图或什么?

谢谢和最好的问候,亚历克斯

ios image render
1个回答
0
投票

我建议看看CAShapeLayer,它通常很快,但我不能说它在你的情况下是否优于UIGraphicsImageRenderer。我的猜测是它会,因为它也会根据需要进行扩展,因此无需创建大图像。

如果您不熟悉图层,它们就像是视图,除了它们没有用户输入部分。它们很容易使用,因为每个UIView实际上都有一个.layer用于渲染,也可以用作层父类。

要使图层与视图一起使用,只需将其作为子图层添加到视图图层属性中,然后确保它具有正确的大小。调整图层大小的最佳方法是使用图层.contentsGravity或在视图layoutSubviews中手动设置。

Read more about CAShapeLayer in the docs

A tutorial on layers

© www.soinside.com 2019 - 2024. All rights reserved.