web-dev-qa-db-fra.com

UIColor ne fonctionne pas avec les valeurs RGBA

J'essaie de changer la couleur du texte dans un UITextField en utilisant le code suivant (valeur RGBA) mais il apparaît juste blanc ou clair, je ne suis pas trop sûr car l'arrière-plan est blanc lui-même.

passwordTextField.textColor = UIColor(red: CGFloat(202.0), green: CGFloat(228.0), blue: CGFloat(230.0), alpha: CGFloat(100.0))

passwordTextField.returnKeyType = UIReturnKeyType.Done
passwordTextField.placeholder = "Password"
passwordTextField.backgroundColor = UIColor.clearColor()
passwordTextField.borderStyle = UITextBorderStyle.RoundedRect
passwordTextField.font = UIFont(name: "Avenir Next", size: 14)
passwordTextField.textAlignment = NSTextAlignment.Center
passwordTextField.secureTextEntry = true
25
Stephen Fox

Les valeurs RVB pour UIColor sont comprises entre 0 et 1 (voir la documentation "spécifié comme une valeur de 0,0 à 1,0")

Vous devez diviser vos nombres par 255:

passwordTextField.textColor = UIColor(red: CGFloat(202.0/255.0), green: CGFloat(228.0/255.0), blue: CGFloat(230.0/255.0), alpha: CGFloat(1.0))

Une autre chose, vous n'avez pas besoin de créer CGFloats:

passwordTextField.textColor = UIColor(red:202.0/255.0, green:228.0/255.0, blue:230.0/255.0, alpha:1.0)
67
bjtitus

Utilisation de l'init pratique (code comme un pro)

Étape 1

extension UIColor {
    convenience init(r: CGFloat, g: CGFloat, b: CGFloat) {
        self.init(red: r/255, green: g/255, blue: b/255, alpha: 1)
    }
}

Usage

//let color = UIColor(red: 202/255, green: 228/255, blue: 230/255, alpha: 1) ☠️
let color = UIColor(r: 202, g: 228, b: 230) // ????
5
Alwin

essayez plutôt ceci:

passwordTextField.textColor = UIColor(red: 0.792, green: 0.894, blue: 0.901, alpha: 1.0

Mettez toujours des valeurs substituées. 202/255 = 0,792

3
shahil

le rouge, le vert, le bleu et l'alpha sont censés être compris entre 0,0 et 1,0.

2
Steven Fisher

Comme d'autres l'ont mentionné, les composants UIColor sont normalisés dans une plage de 0,0 à 1,0 (je pense que les gammes de couleurs larges sont l'exception, mais n'ont pas encore fait de recherches à ce sujet).

Une conveninet extension à la classe UIColor vous permettra d'utiliser des valeurs comprises entre 0 et 255 (comme celles obtenues auprès de divers inspecteurs et outils d'édition d'images):

import UIKit

extension UIColor {

    convenience init(
        redByte   red:UInt8,
        greenByte green:UInt8,
        blueByte  blue:UInt8,
        alphaByte alpha:UInt8
        ) {
        self.init(
            red:   CGFloat(red  )/255.0,
            green: CGFloat(green)/255.0,
            blue:  CGFloat(blue )/255.0,
            alpha: CGFloat(alpha)/255.0
        )
    }
}
1
Nicolas Miari

Méthodes pratiques UIColor, à partir d'Integers ou d'Hex.

extension UIColor {


    convenience init(red: Int, green: Int, blue: Int, alpha: CGFloat) {
        assert(red >= 0 && red <= 255, "Invalid red component")
        assert(green >= 0 && green <= 255, "Invalid green component")
        assert(blue >= 0 && blue <= 255, "Invalid blue component")

        self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: alpha)
    }



    convenience init(rgb: Int, alpha: CGFloat = 1) {
        self.init(
            red: (rgb >> 16) & 0xFF,
            green: (rgb >> 8) & 0xFF,
            blue: rgb & 0xFF,
            alpha: alpha
        )
    }
}
0
dengST30