2016-04-10 10 views
0

Ich habe versucht, jeder Zeile eine andere Farbe zu geben, aber jedes Mal, wenn ich die Schieberegler verschiebe, die dafür zuständig sind, die Zeilen mit Farbe zu versehen, ändert jede einzelne Zeile ihre Farbe. Ich habe versucht, die Werte, die ich von den Slidern bekomme, in die for-Schleife zu legen, aber aus irgendeinem Grund gibt es nicht jede Zeile eine andere Farbe. Die Speichervariablen sind die Variablen, die ich verwende, um die Werte aus den Schiebereglern zu speichern, die in meiner View-Controller-Klasse definiert sind.Wie stellst du verschiedene Linien mit verschiedenen Farben ein?

Um zu verdeutlichen, was ich versuche, hier ein Beispiel: Zeile 1 könnte rot sein und Zeile 2 könnte lila sein.

Hier ist mein aktueller Versuch, die Farbe der Linien zu ändern:

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



} 


} 

Hat es etwas mit dieser Codezeile zu tun hat:

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

Antwort

0

Wenn DrawRect aufgerufen wird, zeichnet es alle Zeilen neu. Sie müssen Farben mit Linien verknüpfen. Sie könnten das tun, indem Sie Ihrem Line-Objekt Farbeigenschaften hinzufügen und sie in touchesMoved setzen und dann diese Eigenschaften in drawRect verwenden, um die StrokeColor festzulegen. Zum Beispiel in der Linie hinzufügen:

var redValue:CGFloat 
    var greenValue:CGFloat 
    var blueValue:CGFloat 

In touchesMoved soll wohl wirklich touchesEnded werden, so etwas sagen wie:

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

Dann in 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

Thank you! Es funktioniert jetzt wie beabsichtigt! Allerdings musste ich die Linienfarbenwerte in CGFloat konvertieren und die Startpunkt- und Endpunktvariablen entfernen, da ich diese Parameter nicht verwendete. – user3479469

0

Sie machen die Farbänderung für jede Farbe in deiner Grafik. Wenn Sie die Farbe ändern, nur für ein Segment (zum Beispiel der ersten) wollen, müssen Sie einen Test schreiben,

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

Wenn alle Segmente eine andere Farbe haben, können Sie die Farbe int die speichern können Linienobjekt, und rufen Sie es wie die Punkte

Verwandte Themen