Recherche…
Créer un UIColor
Vous pouvez créer un UIColor plusieurs manières:
Rapide
Utiliser l'une des couleurs prédéfinies:
let redColor = UIColor.redColor() let blueColor: UIColor = .blueColor() // In Swift 3, the "Color()" suffix is removed: let redColor = UIColor.red let blueColor: UIColor = .blueSi le compilateur sait déjà que la variable est une instance de
UIColorvous pouvez ignorer le type tous ensemble:let view = UIView() view.backgroundColor = .yellowColor()En utilisant la valeur de niveaux de gris et l'alpha:
let grayscaleColor = UIColor(white: 0.5, alpha: 1.0)En utilisant la teinte, la saturation, la luminosité et l'alpha:
let hsbColor = UIColor( hue: 0.4, saturation: 0.3, brightness: 0.7, alpha: 1.0 )En utilisant les valeurs RGBA:
let rgbColor = UIColor( red: 30.0 / 255, green: 70.0 / 255, blue: 200.0 / 255, alpha: 1.0 )En utilisant une image de motif:
let patternColor = UIColor(patternImage: UIImage(named: "myImage")!)
Objectif c
Utiliser l'une des couleurs prédéfinies:
UIColor *redColor = [UIColor redColor];En utilisant la valeur de niveaux de gris et l'alpha:
UIColor *grayscaleColor = [UIColor colorWithWhite: 0.5 alpha: 1.0];En utilisant la teinte, la saturation, la luminosité et l'alpha:
UIColor *hsbColor = [UIColor colorWithHue: 0.4 saturation: 0.3 brightness: 0.7 alpha: 1.0 ];En utilisant les valeurs RGBA:
UIColor *rgbColor = [UIColor colorWithRed: 30.0 / 255.0 green: 70.0 / 255.0 blue: 200.0 / 255.0 alpha: 1.0 ];En utilisant une image de motif:
UIColor *pattenColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myImage.png"]];
Méthodes non documentées
Il existe une variété de méthodes non documentées sur UIColor qui exposent des couleurs ou des fonctionnalités alternatives. Ceux-ci peuvent être trouvés dans le fichier d'en-tête privé UIColor . Je vais documenter l'utilisation de deux méthodes privées, styleString() et _systemDestructiveTintColor() .
styleString
Depuis iOS 2.0, il existe une méthode d'instance privée sur UIColor appelée styleString qui renvoie une représentation de la chaîne RVB ou RGBA, même pour des couleurs comme whiteColor dehors de l'espace RVB.
Objectif c:
@interface UIColor (Private)
- (NSString *)styleString;
@end
// ...
[[UIColor whiteColor] styleString]; // rgb(255,255,255)
[[UIColor redColor] styleString]; // rgb(255,0,0)
[[UIColor lightTextColor] styleString]; // rgba(255,255,255,0.600000)
Dans Swift, vous pouvez utiliser un en-tête de pontage pour exposer l'interface. Avec pure Swift, vous devrez créer un protocole @objc avec la méthode privée et unsafeBitCast UIColor avec le protocole:
@objc protocol UIColorPrivate {
func styleString() -> String
}
let white = UIColor.whiteColor()
let red = UIColor.redColor()
let lightTextColor = UIColor.lightTextColor()
let whitePrivate = unsafeBitCast(white, UIColorPrivate.self)
let redPrivate = unsafeBitCast(red, UIColorPrivate.self)
let lightTextColorPrivate = unsafeBitCast(lightTextColor, UIColorPrivate.self)
whitePrivate.styleString() // rgb(255,255,255)
redPrivate.styleString() // rgb(255,0,0)
lightTextColorPrivate.styleString() // rgba(255,255,255,0.600000)
_systemDestructiveTintColor()
Il existe une méthode de classe non documentée sur UIColor appelée _systemDestructiveTintColor qui renvoie la couleur rouge utilisée par les boutons système destructeurs:
let red = UIColor.performSelector("_systemDestructiveTintColor").takeUnretainedValue()
Il retourne un objet non géré, que vous devez appeler .takeUnretainedValue() car la propriété de couleur n'a pas été transférée à notre propre objet.
Comme avec toute API non documentée, vous devez faire attention lorsque vous essayez d'utiliser cette méthode:
if UIColor.respondsToSelector("_systemDestructiveTintColor") {
if let red = UIColor.performSelector("_systemDestructiveTintColor").takeUnretainedValue() as? UIColor {
// use the color
}
}
ou en utilisant un protocole:
@objc protocol UIColorPrivateStatic {
func _systemDestructiveTintColor() -> UIColor
}
let privateClass = UIColor.self as! UIColorPrivateStatic
privateClass._systemDestructiveTintColor() // UIDeviceRGBColorSpace 1 0.231373 0.188235 1
Couleur avec composant Alpha
Vous pouvez définir l'opacité sur un certain UIColor sans en créer un en utilisant l' init(red:_,green:_,blue:_,alpha:_) .
Rapide
let colorWithAlpha = UIColor.redColor().colorWithAlphaComponent(0.1)
Swift 3
//In Swift Latest Version
_ colorWithAlpha = UIColor.red.withAlphaComponent(0.1)
Objectif c
UIColor * colorWithAlpha = [[UIColor redColor] colorWithAlphaComponent:0.1];
Faire en sorte que les attributs définis par l'utilisateur appliquent le type de données CGColor
Par défaut, Interface Builder n'accepte pas le CGColor données CGColor , de sorte que vous CGColor ajouter un CGColor aide des attributs définis par l'utilisateur dans le générateur d'interface. on peut vouloir utiliser une extension comme ceci:
Extension rapide:
extension CALayer {
func borderUIColor() -> UIColor? {
return borderColor != nil ? UIColor(CGColor: borderColor!) : nil
}
func setBorderUIColor(color: UIColor) {
borderColor = color.CGColor
}
}
Le nouvel attribut défini par l'utilisateur (borderUIColor) sera reconnu et appliqué sans problème.
Créer un UIColor à partir d'un nombre hexadécimal ou d'une chaîne
Vous pouvez créer une UIColor partir d'un nombre hexadécimal ou d'une chaîne, par exemple 0xff00cc, "#FFFFFF"
Rapide
Valeur Int
extension UIColor {
convenience init(hex: Int, alpha: CGFloat = 1.0) {
let r = CGFloat((hex >> 16) & 0xff) / 255
let g = CGFloat((hex >> 08) & 0xff) / 255
let b = CGFloat((hex >> 00) & 0xff) / 255
self.init(red: r, green: g, blue: b, alpha: alpha)
}
}
Exemple:
let color = UIColor(hex: 0xff00cc, alpha: 1.0)
Notez que pour alpha la valeur par défaut de 1.0 est fournie, elle peut donc être utilisée comme suit:
let color = UIColor(hex: 0xff00cc)
Valeur de chaîne
extension UIColor {
convenience init(hexCode: String) {
let hex = hexCode.stringByTrimmingCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet)
var int = UInt32()
NSScanner(string: hex).scanHexInt(&int)
let a, r, g, b: UInt32
switch hex.characters.count {
case 3:
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
case 6:
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
case 8:
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
default:
(a, r, g, b) = (1, 1, 1, 0)
}
self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
}
}
Exemple d'utilisation:
Hex avec alpha
let color = UIColor("#80FFFFFF")
Hex sans alpha (la color alpha sera égale à 1,0)
let color = UIColor("#FFFFFF")
let color = UIColor("#FFF")
Objectif c
Valeur Int
@interface UIColor (Hex)
+ (UIColor *)colorWithHex:(NSUInteger)hex alpha:(CGFloat)alpha;
@end
@implementation UIColor (Hex)
+ (UIColor *)colorWithHex:(NSUInteger)hex alpha:(CGFloat)alpha {
return [UIColor colorWithRed:((CGFloat)((hex & 0xFF0000) >> 16))/255.0
green:((CGFloat)((hex & 0xFF00) >> 8))/255.0
blue:((CGFloat)(hex & 0xFF))/255.0
alpha:alpha];
}
@end
Exemple:
UIColor *color = [UIColor colorWithHex:0xff00cc alpha:1.0];
Valeur de chaîne
- (UIColor*) hex:(NSString*)hexCode {
NSString *noHashString = [hexCode stringByReplacingOccurrencesOfString:@"#" withString:@""];
NSScanner *scanner = [NSScanner scannerWithString:noHashString];
[scanner setCharactersToBeSkipped:[NSCharacterSet symbolCharacterSet]];
unsigned hex;
if (![scanner scanHexInt:&hex]) return nil;
int a;
int r;
int g;
int b;
switch (noHashString.length) {
case 3:
a = 255;
r = (hex >> 8) * 17;
g = ((hex >> 4) & 0xF) * 17;
b = ((hex >> 0) & 0xF) * 17;
break;
case 6:
a = 255;
r = (hex >> 16);
g = (hex >> 8) & 0xFF;
b = (hex) & 0xFF;
break;
case 8:
a = (hex >> 24);
r = (hex >> 16) & 0xFF;
g = (hex >> 8) & 0xFF;
b = (hex) & 0xFF;
break;
default:
a = 255.0;
r = 255.0;
b = 255.0;
g = 255.0;
break;
}
return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:a / 255];
}
Exemple d'utilisation:
Hex avec alpha
UIColor* color = [self hex:@"#80FFFFFF"];
Hex sans alpha (la color alpha sera égale à 1)
UIColor* color = [self hex:@"#FFFFFF"];
UIColor* color = [self hex:@"#FFF"];
Luminosité de couleur ajustée de UIColor
L'exemple de code ci-dessous vous donnera une version ajustée de cette couleur où un pourcentage plus élevé sera plus lumineux et un pourcentage plus faible plus sombre.
Objectif c
+ (UIColor *)adjustedColorForColor:(UIColor *)c : (double)percent
{
if (percent < 0) percent = 0;
CGFloat r, g, b, a;
if ([c getRed:&r green:&g blue:&b alpha:&a])
return [UIColor colorWithRed:MAX(r * percent, 0.0)
green:MAX(g * percent, 0.0)
blue:MAX(b * percent, 0.0)
alpha:a];
return nil;
}
Rapide
func adjustedColorForColor( c: UIColor, var percent: CGFloat) -> UIColor {
if percent < 0 {
percent = 0
}
var r,g,b,a: CGFloat
r = 0.0
g = 0.0
b = 0.0
a = 0.0
if c.getRed(&r, green: &g, blue: &b, alpha: &a) {
return UIColor(red: max(r * percent, 0.0), green: max(g * percent, 0.0), blue: max(b * percent, 0.0), alpha: a)
}
return UIColor()
}
UIColor à partir d'un motif d'image
Vous pouvez créer un objet UIColor aide d'un motif d'image à l'aide de la UIColor(patternImage:_) .
btn.backgroundColor = UIColor(patternImage: UIImage(named: "image")!)
Ombre plus claire et plus foncée d'une couleur UIC donnée
L'exemple de code ci-dessous montre comment obtenir une nuance plus claire et plus foncée d'une couleur donnée, utile dans les applications ayant des thèmes dynamiques
Pour une couleur plus foncée
+ (UIColor *)darkerColorForColor:(UIColor *)c
{
CGFloat r, g, b, a;
if ([c getRed:&r green:&g blue:&b alpha:&a])
return [UIColor colorWithRed:MAX(r - 0.2, 0.0)
green:MAX(g - 0.2, 0.0)
blue:MAX(b - 0.2, 0.0)
alpha:a];
return nil;
}
Pour une couleur plus claire
+ (UIColor *)lighterColorForColor:(UIColor *)c
{
CGFloat r, g, b, a;
if ([c getRed:&r green:&g blue:&b alpha:&a])
return [UIColor colorWithRed:MIN(r + 0.2, 1.0)
green:MIN(g + 0.2, 1.0)
blue:MIN(b + 0.2, 1.0)
alpha:a];
return nil;
}
Voir Différences visuelles ci-dessous, en considérant que la couleur donnée est [UIColor orangeColor]


