web-dev-qa-db-fra.com

Comment créer un UIColor à partir de RGBA?

Je veux utiliser NSAttributedString dans mon projet, mais lorsque j'essaie de définir la couleur, qui ne fait pas partie de l'ensemble standard (redColor, blackColor, greenColor etc.) UILabel affiche ces lettres en blanc. Voici ma ligne de ce code.

[attributedString addAttribute:NSForegroundColorAttributeName
                         value:[UIColor colorWithRed:66
                                               green:79
                                                blue:91
                                               alpha:1]
                         range:NSMakeRange(0, attributedString.length)];

J'ai essayé de faire de la couleur avec CIColor à partir du framework Core Image, mais cela a montré les mêmes résultats. Que dois-je changer dans mon code pour l'exécuter correctement?

Merci pour les réponses, les gars!

44
agoncharov

Vos valeurs sont incorrectes, vous devez diviser chaque valeur de couleur par 255,0.

[UIColor colorWithRed:66.0f/255.0f
                green:79.0f/255.0f
                 blue:91.0f/255.0f
                alpha:1.0f];

Les documents indiquent:

+ (UIColor *)colorWithRed:(CGFloat)red
                    green:(CGFloat)green
                     blue:(CGFloat)blue
                    alpha:(CGFloat)alpha

Paramètres

rouge La composante rouge de l'objet couleur, spécifiée comme une valeur de 0,0 à 1,0.

vert Composant vert de l'objet couleur, spécifié sous la forme d'une valeur de 0,0 à 1,0.

bleu Composant bleu de l'objet couleur, spécifié sous la forme d'une valeur de 0,0 à 1,0.

alpha La valeur d'opacité de l'objet couleur, spécifiée comme une valeur de 0,0 à 1,0.

Référence ici.

113
yfrancis

Une de mes macros préférées, pas de projet sans:

#define RGB(r, g, b) [UIColor colorWithRed:(float)r / 255.0 green:(float)g / 255.0 blue:(float)b / 255.0 alpha:1.0]
#define RGBA(r, g, b, a) [UIColor colorWithRed:(float)r / 255.0 green:(float)g / 255.0 blue:(float)b / 255.0 alpha:a]

Utilisation comme:

[attributedString addAttribute:NSForegroundColorAttributeName
                         value:RGB(66, 79, 91)
                         range:NSMakeRange(0, attributedString.length)];
27
Geri

UIColor utilise une plage de 0 à 1,0, pas des entiers à 255 .. Essayez ceci:

// create color
UIColor *color = [UIColor colorWithRed:66/255.0
                                 green:79/255.0
                                  blue:91/255.0
                                 alpha:1];

// use in attributed string
[attributedString addAttribute:NSForegroundColorAttributeName
                         value:color
                         range:NSMakeRange(0, attributedString.length)];
5
calimarkus

Veuillez essayer le code

[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:77.0/255.0f green:104.0/255.0f blue:159.0/255.0f alpha:1.0] range:NSMakeRange(0, attributedString.length)];

comme

Label.textColor=[UIColor colorWithRed:77.0/255.0f green:104.0/255.0f blue:159.0/255.0f alpha:1.0];  

Les composants RVB d'UIColor sont mis à l'échelle entre 0 et 1, pas jusqu'à 255.

3

Depuis que @Jaswanth Kumar l'a demandé, voici la version Swift de LSwift :

extension UIColor {
    convenience init(rgb:UInt, alpha:CGFloat = 1.0) {
        self.init(
            red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(rgb & 0x0000FF) / 255.0,
            alpha: CGFloat(alpha)
        )
    }
}

Utilisation: let color = UIColor(rgb: 0x112233)

3
superarts.org