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 = .blue
Si le compilateur sait déjà que la variable est une instance de
UIColor
vous 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]