如何设置不同颜色的不同线条?

时间:2016-04-10 11:18:09

标签: ios swift colors drawing drawrect

我一直试图给每一条线赋予不同的颜色,但每次我移动滑块负责为线条提供颜色时,每一条线都会改变颜色。我已经尝试将我从滑块中获得的值放入for循环中,但由于某种原因,它不会给每行提供不同的颜色。存储变量是我用来存储视图控制器类中定义的滑块的值的变量。

为了澄清我正在尝试做什么,这是一个例子: 第1行可能是红色,第2行可能是紫色。

这是我目前尝试更改线条的颜色:

import UIKit
import CoreData

class DrawClass: UIView {


var lines:[Line] = []
var lastPoint: CGPoint!


required init(coder aDecoder: NSCoder)
{
    super.init(coder: aDecoder)
    self.backgroundColor = UIColor.whiteColor()
    self.layer.zPosition = 1

}




override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent){
    if let touch = touches.first as? UITouch {
        lastPoint =  touch.locationInView(self)
    }
}

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent){
    if let touch = touches.first as? UITouch {
        var newPoint = touch.locationInView(self)
        lines.append(Line(start: lastPoint, end: newPoint))
        lastPoint = newPoint
    }
    self.setNeedsDisplay()
}






override func drawRect(rect: CGRect) {
    var context = UIGraphicsGetCurrentContext()


    var storage: Float = ViewController.simple.storage1
    var storage2: Float = ViewController.simple.storage2
    var storage3: Float = ViewController.simple.storage3

    for line in lines
    {
        CGContextBeginPath(context)
        CGContextMoveToPoint(context, line.start.x, line.start.y)
        CGContextAddLineToPoint(context, line.end.x, line.end.y)
        CGContextSetRGBStrokeColor(context, CGFloat(storage), CGFloat(storage2), CGFloat(storage3), 1)
        CGContextSetLineWidth(context, 5)
        CGContextStrokePath(context)
    }



}


}

这与这行代码有什么关系:

lines.append(Line(start: lastPoint, end: newPoint))

2 个答案:

答案 0 :(得分:0)

您正在为图形中的每种颜色进行颜色更改。 如果您只想为一个片段(例如第一个片段)更改颜色,则必须添加测试,例如

if line == 0 {
    CGContextSetRGBStrokeColor(context, CGFloat(storage), CGFloat(storage2), CGFloat(storage3), 1)
} else {
    CGContextSetRGBStrokeColor(context, CGFloat(0.0), CGFloat(0.), CGFloat(0.0), 1)
}

如果所有段都可以使用不同的颜色,则可以将颜色存储在线对象中,并像点那样检索它

答案 1 :(得分:0)

调用drawRect时,它会重绘所有行。您需要将颜色与线条相关联。您可以这样做,购买在Line对象上添加颜色属性并在touchesMoved中设置它们,然后使用drawRect中的这些属性来设置StrokeColor。例如,添加到Line:

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent){
    if let touch = touches.first as? UITouch {
        var newPoint = touch.locationInView(self)
        lines.append(Line(start: lastPoint, end: newPoint,redValue:ViewController.simple.storage1,greenValue:ViewController.simple.storage2,blueValue:ViewController.simple.storage3))
        lastPoint = newPoint
    }
    self.setNeedsDisplay()
}

在touchesMoved中,可能真的应该是touchesEnded,比如说:

override func drawRect(rect: CGRect) {
    var context = UIGraphicsGetCurrentContext()

    for line in lines
    {
        CGContextBeginPath(context)
        CGContextMoveToPoint(context, line.start.x, line.start.y)
        CGContextAddLineToPoint(context, line.end.x, line.end.y)
        CGContextSetRGBStrokeColor(context, line.redValue, line.greenValue, line.blueValue, 1)
        CGContextSetLineWidth(context, 5)
        CGContextStrokePath(context)
    }
}

然后在drawRect:

dictionaryItem