2016-04-10 2 views
0

J'ai essayé de donner une couleur différente à chaque ligne, mais chaque fois que je déplace les curseurs responsables de la couleur, chaque ligne change de couleur. J'ai essayé de placer les valeurs que je reçois des curseurs dans la boucle for, mais pour une raison quelconque, cela ne donne pas une couleur différente à chaque ligne. Les variables de stockage sont les variables que j'utilise pour stocker les valeurs des curseurs définis dans ma classe de contrôleurs de vue.Comment définir différentes lignes avec des couleurs différentes?

Pour clarifier ce que j'essaie de faire, voici un exemple: La ligne 1 pourrait être rouge et la ligne 2 pourrait être violette.

Voilà ma tentative actuelle à changer la couleur des lignes:

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



} 


} 

-t-il quelque chose à voir avec cette ligne de code:

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

Répondre

0

Lorsque drawRect est appelé, il redessine toutes les lignes. Vous devez associer les couleurs aux lignes. Vous pouvez le faire en ajoutant des propriétés de couleur sur votre objet Ligne et en les définissant dans touchesMoved puis en utilisant ces propriétés dans drawRect pour définir StrokeColor. Par exemple ajouter à la ligne:

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

En touchesMoved, devrait probablement être vraiment touchesEnded, dire quelque chose comme:

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

Puis, en 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

Merci! Cela fonctionne comme prévu maintenant! Cependant, j'ai dû convertir les valeurs de couleur de ligne en CGFloat et supprimer les variables de point de départ et de point final puisque je n'utilisais pas ces paramètres. – user3479469

0

que vous faites le changement de couleur pour chaque couleur dans votre graphique. Si vous voulez changer la couleur juste pour un segment (par exemple la première), vous devez ajouter un test, comme

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

Si tous les segments peuvent avoir une couleur différente, vous pouvez stocker la couleur int objet ligne, et récupérez-le comme les points