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 CGFloat *colors = CGColorGetComponents( curView.backgroundColor.CGColor );
Estos enlaces proporcionan más detalles:
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.