2017-08-01 88 views
1

斯威夫特怎麼可能繪製一條線,每個點可以有不同的顏色?斯威夫特 - 如何繪製一條線,每個點可以有一個單獨的顏色

所以我們假設我有一些數據傳入,它代表一行中每個點的顏色值。我怎麼能做到這一點?如果我使用UIBezierPath,我有一個路徑,我只能給路徑一個顏色。對我而言,我必須製作600個路徑(每個點都是一個路徑)才能獲得,我想要的是什麼。

有沒有更簡單的方法?

非常感謝!

編輯: 我試着爲每個創建1x1 UIBezierPath和CAShapeLayer。它有效,但整個應用程序變得非常緩慢,所以必須有一個更簡單或更快的方法,有人知道一個解決方案嗎?

回答

-1

我不認爲有任何方法可以用不同的設置繪製貝塞爾路徑的不同腿。單獨畫線可能是一條路。

+0

謝謝你的回答。那麼你將如何單獨繪製線條?正如我提到的,如果我使用1x1點bezier路徑,應用程序變得非常緩慢。 – Manuel

+0

看看這個問題的第一個答案: https://stackoverflow.com/questions/856354/how-do-i-draw-a-line-on-the-iphone –

+0

你好,謝謝,我已經看着答案。我試過這段代碼(轉換爲swift),但我確實需要一個自定義的UIView,並且只能用這個覆蓋drawRect,對吧?我需要每秒鐘更改線條和顏色(至少)。 – Manuel

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() 
     } 
    } 
} 
}