Swift - 如何绘制一条线,每个点可以有一个单独的颜色

时间:2017-08-01 19:25:37

标签: ios swift colors uibezierpath

如何在Swift中绘制一条线,其中每个点可以有不同的颜色?

因此,假设我有一些数据传入,表示一行中每个点的颜色值。我怎么能做到这一点?如果我使用UIBezierPath,我有一个路径,我只能给路径一个颜色。对于我的情况,我必须制作600个路径(每个点一个路径)才能获得,我想拥有的。

有更简单的方法吗?

非常感谢!

编辑: 我试图为每个创建一个1x1 UIBezierPath和一个CAShapeLayer。它有效,但整个应用程序变得非常慢,所以必须有一个更简单或更快的方法,有人知道解决方案吗?

2 个答案:

答案 0 :(得分:0)

现在我被困在这里:

它实际上有效,只要我更新我的2-D数组和我的“开始”属性,它就会重新绘制UIView,但这需要大约5秒钟。有没有人知道更快的方法呢?

class CustomView: UIView {

public var context = UIGraphicsGetCurrentContext()

public var redvalues = [[CGFloat]](repeating: [CGFloat](repeating: 1.0, count: 500), count: 500)

public var start = 0
{
    didSet{
        self.setNeedsDisplay()
    }
}

override func draw(_ rect: CGRect
{
    super.draw(rect)
    context = UIGraphicsGetCurrentContext()
    for yindex in 0...499{
        for xindex in 0...499 {
            context?.setStrokeColor(UIColor(red: redvalues[xindex][yindex], green: 0.0, blue: 0.0, alpha: 1.0).cgColor)

            context?.setLineWidth(2)
            context?.beginPath()
            context?.move(to: CGPoint(x: CGFloat(xindex), y: CGFloat(yindex)))
            context?.addLine(to: CGPoint(x: CGFloat(xindex)+1.0, y: CGFloat(yindex)))
            context?.strokePath()
        }
    }
}
}

答案 1 :(得分:-1)

我认为没有办法用不同的设置绘制贝塞尔曲线的不同腿。单独绘制线条可能是要走的路。