2016-09-05 4 views
3

J'ai une application de dessin iOS avec des boutons qui permettent à un utilisateur de choisir les couleurs à dessiner. Puisque mon pinceau utilise des valeurs RVB mais que mes constantes de couleur sont des UIColors, j'ai besoin de convertir. J'ai essayéComment puis-je accéder aux valeurs RVB d'un UIColor?

private var currentButton: UIButton? { 
    willSet{ 
     currentButton?.layer.borderWidth = 0 
    } 
    didSet{ 
     currentButton?.layer.borderWidth = 2 
     let index = (currentButton?.tag)! - 1 
     drawView.brush.blue = colors[index].ciColor.blue //Here is where I get the error 
     drawView.brush.green = colors[index].ciColor.green 
     drawView.brush.red = colors[index].ciColor.red 
    } 
} 

Ce que j'ai trouvé dans une autre question StackOverflow. Cependant, lorsque je tente d'obtenir une valeur RVB en ligne 8 Je reçois cette erreur:

Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '*** -CIColor not defined for the UIColor UIExtendedSRGBColorSpace 1 1 1 1; need to first convert colorspace.' 

Il dit clairement que je dois convertir l'espace couleur. Mais CIColor.colorSpace est seulement disponible. Qu'est-ce que je fais mal?

+0

'var ciColor: CIColor {get} Description de \t La couleur de l'image de base associée au récepteur. Cette propriété lève une exception si l'objet de couleur n'a pas été initialisé avec une couleur Core Image. –

+1

Vous pouvez utiliser l'initialiseur CoreImage.CIColor pour créer une nouvelle couleur à partir de votre UIColor 'CoreImage.CIColor (color: colors [index]). Blue 'avec l'avantage qu'il ne retourne pas un optionnel. –

Répondre

6

Utilisation getRed(_:green:blue:alpha:):

var red: CGFloat = 0 
var green: CGFloat = 0 
var blue: CGFloat = 0 
var alpha: CGFloat = 0 

color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)