La réponse ci-dessous aurait dû être un commentaire. Oups.
defmech
17
Remarque: cela ne fonctionne que pour les couleurs de l'espace RVB. Par exemple, cela ne fonctionnera pas sur [UIColor whiteColor] car ce n'est pas en RVB.
Ceci n'est pris en charge que dans iOS 5.0 ou plus récent.
Jon Trauntvein
3
Sachez que cette méthode ne réussira que si la couleur de départ est dans «un espace colorimétrique compatible», qui peut varier en fonction de l'appareil / du système d'exploitation. Par exemple, je viens de découvrir que l'appeler sur [UIColor darkGrayColor] échouera sur un iPad 2 exécutant iOS 7. Cependant, la même couleur fonctionne bien sur un iPad Air exécutant iOS 8.
devios1
@ devios1 Cela peut probablement être résolu en sérialisant d'abord la couleur, puis en la désérialisant en utilisant NSKeyedArchiver, comme ceci:multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
Albert Renshaw
40
SWIFT 3 et 4
J'ai trouvé que cgColor.components ne renvoyait pas toujours 4 valeurs de couleur, j'ai donc changé cela pour qu'il les récupère à partir d'un wrapper CIColor
n'a-t-il pas généré un avertissement pour avoir tenté de lancer implicitement CGFloat pour qu'il flotte? :)
braden
5
UIColor*color =[[UIColor greenColor] retain];//line 1//OR(You will have color variable either like line 1 or line 2)
color = curView.backgroundColor;//line 2CGColorRef colorRef =[color CGColor];int _countComponents =CGColorGetNumberOfComponents(colorRef);if(_countComponents ==4){constCGFloat*_components =CGColorGetComponents(colorRef);CGFloat red = _components[0];CGFloat green = _components[1];CGFloat blue = _components[2];CGFloat alpha = _components[3];NSLog(@"%f,%f,%f,%f",red,green,blue,alpha);}[color release];
Depuis iOS 2.0, il existe une méthode d'instance privée UIColorappelée styleStringqui renvoie une représentation sous forme de chaîne RVB ou RVBA de la couleur, même pour des couleurs comme whiteColor en dehors de l'espace RVB.
Dans Swift, vous pouvez utiliser un en-tête de pontage pour exposer l'interface. Avec Swift pur, vous devrez créer un @objcprotocole avec la méthode privée, et unsafeBitCastUIColoravec le protocole:
L'utilisation de HandyUIKit rend cela très simple :
importHandyUIKitlet color =UIColor(red:0.1, green:0.2, blue:0.3, alpha:0.4)// get any of the rgba values
color.rgba.red // => 0.1
color.rgba.green // => 0.2
color.rgba.blue // => 0.3
color.rgba.alpha // => 0.4
Il existe également une option similaire pour obtenir des hsbavaleurs :
let color =UIColor(hue:0.1, saturation:0.2, brightness:0.3, alpha:0.4)// you can get any of the hsba values, too
color.hsba.hue // => 0.1
color.hsba.saturation // => 0.2
color.hsba.brightness // => 0.3
color.hsba.alpha // => 0.4
Installez-le simplement à l'aide de Carthage et vous êtes prêt à partir.
Réponses:
Ces liens fournissent de plus amples détails:
la source
colors
, vous pouvez écrire quelque chose comme,CGFloat red = colors[0];
error: <EXPR>:3:1: error: 'CGColorGetComponents' has been replaced by property 'CGColor.components'
Dans iOS 5, vous pouvez utiliser:
la source
NSKeyedArchiver
, comme ceci:multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
SWIFT 3 et 4
J'ai trouvé que cgColor.components ne renvoyait pas toujours 4 valeurs de couleur, j'ai donc changé cela pour qu'il les récupère à partir d'un wrapper CIColor
SWIFT 2
Ce n'est pas le moyen le plus efficace, donc je n'irais pas utiliser celui-ci où une vue sera constamment redessinée.
la source
J'espère que cela sera utile
la source
Je viens de créer une catégorie pour cela.
Va quelque chose comme:
Une partie de
eppz!kit
avec plus de goodies UIColor .la source
Merci. J'ai dû ajouter le
const
au début de la ligne car cela générait un avertissement.la source
la source
La version Swift 3 de David Rees répond:
la source
Vous pouvez utiliser les composants CIColor (swift 5)
cela fonctionne également pour l'espace colorimétrique non RVB
la source
Depuis iOS 2.0, il existe une méthode d'instance privée
UIColor
appeléestyleString
qui renvoie une représentation sous forme de chaîne RVB ou RVBA de la couleur, même pour des couleurs comme whiteColor en dehors de l'espace RVB.Objectif c:
Dans Swift, vous pouvez utiliser un en-tête de pontage pour exposer l'interface. Avec Swift pur, vous devrez créer un
@objc
protocole avec la méthode privée, etunsafeBitCast
UIColor
avec le protocole:la source
La réponse la plus votée est obsolète:
Au lieu de cela, utilisez
myUIColor.cgColor.components
la source
Je voulais obtenir la couleur d'arrière-plan de
UITableViewStyle
"UITableViewStyleGrouped" donc dans laviewDidAppear:
méthode j'ai ajouté le code:NSLog(@"%@", self.tableView.backgroundView.backgroundColor);
Il a fait ce que j'avais prévu et a renvoyé le journal:
UIDeviceRGBColorSpace 0.937255 0.937255 0.956863 1
Donc en bref, tapez simplement
NSLog(@"%@", [UIColor whateverColor]);
la source
L'utilisation de HandyUIKit rend cela très simple :
Il existe également une option similaire pour obtenir des
hsba
valeurs :Installez-le simplement à l'aide de Carthage et vous êtes prêt à partir.
J'espère que ça aide!
la source
Quelques macros utiles que j'ai créées pour cela et d'autres contrôles de couleur:
Dans votre cas, vous utiliseriez simplement
Macros:
la source
réglez votre UIColor comme ceci
c'est pour Xamarin ios ... mais c'est sûr qu'il existe une méthode comme celle-ci dans swift.
la source