2016-04-10 4 views
0

Я пытаюсь дать каждой строке другой цвет, но каждый раз, когда я перемещаю ползунки, отвечающие за цвет линий, каждая строка меняет свой цвет. Я попытался помещать значения, которые я получаю из ползунков, в цикл 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)) 

ответ

0

Когда drawRect называется перерисовыванием всех линий. Вам нужно связать цвета с линиями. Вы можете сделать это, добавив свойства цвета в свой объект Line и установив их в touchhesMoved, затем используя эти свойства в 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) 
    } 
} 
+0

Спасибо! Он функционирует так, как предполагалось сейчас! Однако мне пришлось преобразовать значения цвета линии в CGFloat и удалить переменные начальной и конечной точки, так как я не использовал эти параметры. – user3479469

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

Если все сегменты могут иметь различный цвет, то вы можете сохранить цвет ИНТ line и получить его как точки