你如何设置不同颜色的不同线条?
How do you set different lines with different colours?
我一直在尝试为每条线赋予不同的颜色,但每次我移动负责为线提供颜色的滑块时,每条线都会改变其颜色。我试过将从滑块获得的值放入 for 循环中,但出于某种原因,它并没有为每一行赋予不同的颜色。存储变量是我用来存储视图控制器中定义的滑块值的变量 class。
为了阐明我要做什么,这里有一个例子:
第 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))
您正在对图形中的每种颜色进行颜色更改。
如果你只想改变一个段的颜色(例如第一个),你必须添加一个测试,比如
if line == 0 {
CGContextSetRGBStrokeColor(context, CGFloat(storage), CGFloat(storage2), CGFloat(storage3), 1)
} else {
CGContextSetRGBStrokeColor(context, CGFloat(0.0), CGFloat(0.), CGFloat(0.0), 1)
}
如果所有线段都可以有不同的颜色,您可以将颜色存储在线对象中,并像点一样检索它
调用 drawRect 时,它正在重绘所有线条。您需要将颜色与线条相关联。您可以通过购买将颜色属性添加到您的 Line 对象并在 touchesMoved 中设置它们,然后在 drawRect 中使用这些属性来设置 StrokeColor。例如添加到行:
var redValue:CGFloat
var greenValue:CGFloat
var blueValue:CGFloat
在touchesMoved中,可能真的应该是touchesEnded,这样说:
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()
}
然后在drawRect中:
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)
}
}
我一直在尝试为每条线赋予不同的颜色,但每次我移动负责为线提供颜色的滑块时,每条线都会改变其颜色。我试过将从滑块获得的值放入 for 循环中,但出于某种原因,它并没有为每一行赋予不同的颜色。存储变量是我用来存储视图控制器中定义的滑块值的变量 class。
为了阐明我要做什么,这里有一个例子: 第 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))
您正在对图形中的每种颜色进行颜色更改。 如果你只想改变一个段的颜色(例如第一个),你必须添加一个测试,比如
if line == 0 {
CGContextSetRGBStrokeColor(context, CGFloat(storage), CGFloat(storage2), CGFloat(storage3), 1)
} else {
CGContextSetRGBStrokeColor(context, CGFloat(0.0), CGFloat(0.), CGFloat(0.0), 1)
}
如果所有线段都可以有不同的颜色,您可以将颜色存储在线对象中,并像点一样检索它
调用 drawRect 时,它正在重绘所有线条。您需要将颜色与线条相关联。您可以通过购买将颜色属性添加到您的 Line 对象并在 touchesMoved 中设置它们,然后在 drawRect 中使用这些属性来设置 StrokeColor。例如添加到行:
var redValue:CGFloat
var greenValue:CGFloat
var blueValue:CGFloat
在touchesMoved中,可能真的应该是touchesEnded,这样说:
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()
}
然后在drawRect中:
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)
}
}