2016-04-03 2 views
1

J'ai eu ce UIColor:Comment convertir valeur de type UIColor à Uint dans rapide

UIColor(red: 0.2, green: 0.4118, blue: 0.1176, alpha: 1.0) 

et je dois convertir en Uint. Comment puis je faire ça?

EDIT:

func showEmailMessage(advice : String) 
{ 
    _ = SCLAlertView().showSuccess("Congratulation", subTitle: advice, closeButtonTitle: "Ok", duration : 10, colorStyle: 0x33691e, colorTextButton: 0xFFFFFF) 
} 

champ de style de couleur veulent Uint

+1

Comment un 'UInt' est-il censé représenter une couleur? Quel résultat attendez-vous et comment cet «UInt» sera-t-il utilisé? – vacawama

+0

pour référence future: http://stackoverflow.com/questions/33300091/how-the-getred-works-properly-in-uicolor-object-in-ios-9-swift –

Répondre

2

Vous pouvez utiliser la méthode UIColor.getRed(...) pour extraire les couleurs CGFloat, convertir ensuite les valeurs de votre triplet CGFloat aux positions de bits appropriées d'une variable UInt32.

// Example: use color triplet CC6699 "=" {204, 102, 153} (RGB triplet) 
let color = UIColor(red: 204.0/255.0, green: 102.0/255.0, blue: 153.0/255.0, alpha: 1.0) 

// read colors to CGFloats and convert and position to proper bit positions in UInt32 
var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0 
if color.getRed(&red, green: &green, blue: &blue, alpha: &alpha) { 

    var colorAsUInt : UInt32 = 0 

    colorAsUInt += UInt32(red * 255.0) << 16 + 
        UInt32(green * 255.0) << 8 + 
        UInt32(blue * 255.0) 

    colorAsUInt == 0xCC6699 // true 
} 

Pour plus de détails, voir par ex. le Language Guide - Advanced Operators qui contient, entre autres choses précieuses, un exemple spécifique pour le décalage de bits avec des triplets RGB.

+0

Parfait! ça a marché ! Je dois juste retourner UInt au lieu de UInt 32! Merci beaucoup! –

+0

@MarcoCastano Joyeux d'aider. Ce qui précède est naturellement directement applicable en utilisant 'UInt' (qui est, pour les nouveaux périphériques, de la même taille que' UInt64') au lieu de 'UInt32', vous aurez juste un remplissage de bit supplémentaire non utilisé. – dfri