objective from color ios rgb uicolor

ios - from - ¿Cómo obtener los valores RGB de UIColor?



uicolor swift 4 (12)

Acabo de hacer una categoría para esto.

NSLog(@"%f", [UIColor blueColor].blue); // 1.000000

Va algo así como:

typedef enum { R, G, B, A } UIColorComponentIndices; @implementation UIColor (EPPZKit) -(CGFloat)red { return CGColorGetComponents(self.CGColor)[R]; } -(CGFloat)green { return CGColorGetComponents(self.CGColor)[G]; } -(CGFloat)blue { return CGColorGetComponents(self.CGColor)[B]; } -(CGFloat)alpha { return CGColorGetComponents(self.CGColor)[A]; } @end

Parte del eppz!kit de eppz!kit Con más golosinas de UIColor .

Estoy creando un objeto de color usando el siguiente código.

curView.backgroundColor = [[UIColor alloc] initWithHue:229 saturation:40 brightness:75 alpha:1];

¿Cómo puedo recuperar los valores RGB del objeto de color creado?


Desde iOS 2.0 hay un método de instancia privada en UIColor llamado styleString que devuelve una representación de cadena RGB o RGBA del color, incluso para colores como whiteColor fuera del espacio RGB.

C objetivo:

@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)

En Swift podría usar un encabezado de puente para exponer la interfaz. Con Swift puro, tendrá que crear un protocolo @objc con el método privado, y unsafeBitCast UIColor con el protocolo:

@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)


En iOS 5 puedes usar:

CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0; [multipliedColor getRed:&red green:&green blue:&blue alpha:&alpha];


Espero que esto sea útil

CGFloat red, green, blue, alpha; //Create a sample color UIColor *redColor = [UIColor redColor]; //Call [redColor getRed: &red green: &green blue: &blue alpha: &alpha]; NSLog(@"red = %f. Green = %f. Blue = %f. Alpha = %f", red, green, blue, alpha);


Quería obtener el color de fondo del UITableViewStyle "UITableViewStyleGrouped", así que en el método viewDidAppear: agregué el código:

NSLog(@"%@", self.tableView.backgroundView.backgroundColor);

Hizo lo que esperaba y devolvió el registro:

UIDeviceRGBColorSpace 0.937255 0.937255 0.956863 1

En resumen, simplemente escriba NSLog(@"%@", [UIColor whateverColor]);


Swift 3 versión de David Rees respuesta:

extension UIColor { var redValue: CGFloat{ return cgColor.components! [0] } var greenValue: CGFloat{ return cgColor.components! [1] } var blueValue: CGFloat{ return cgColor.components! [2] } var alphaValue: CGFloat{ return cgColor.components! [3] } }


Usar HandyUIKit hace esto realmente fácil :

import HandyUIKit let 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

También hay una opción similar para obtener los valores de hsba :

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

Simplemente instálalo usando Carthage y listo.

¡Espero que ayude!


configura tu UIColor como este

UIColor.FromRGB(128, 179, 255)

esto es para Xamarin ios ... pero seguro hay un método como este a toda velocidad.


SWIFT 3 y 4

Encontré que los componentes de cgColor.com no siempre devolverían 4 valores de color, así que cambié esto para que los obtenga de un envoltorio CIColor

extension UIColor { var redValue: CGFloat{ return CIColor(color: self).red } var greenValue: CGFloat{ return CIColor(color: self).green } var blueValue: CGFloat{ return CIColor(color: self).blue } var alphaValue: CGFloat{ return CIColor(color: self).alpha } }

SWIFT 2

extension UIColor { var red: CGFloat{ return CGColorGetComponents(self.CGColor)[0] } var green: CGFloat{ return CGColorGetComponents(self.CGColor)[1] } var blue: CGFloat{ return CGColorGetComponents(self.CGColor)[2] } var alpha: CGFloat{ return CGColorGetComponents(self.CGColor)[3] } }

No es la forma más eficiente, así que no usaría esto para volver a dibujar una vista constantemente.


UIColor *color = [[UIColor greenColor] retain]; //line 1 //OR(You will have color variable either like line 1 or line 2) color = curView.backgroundColor;//line 2 CGColorRef colorRef = [color CGColor]; int _countComponents = CGColorGetNumberOfComponents(colorRef); if (_countComponents == 4) { const CGFloat *_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];



const float* colors = CGColorGetComponents( curView.backgroundColor.CGColor );

Gracias. Tuve que agregar el const al comienzo de la línea ya que estaba generando una advertencia.