Tenga en cuenta que este método solo tendrá éxito si el color inicial está en "un espacio de color compatible", que puede variar según el dispositivo / sistema operativo. Por ejemplo, acabo de descubrir que llamar a esto en [UIColor darkGrayColor] fallará en un iPad 2 con iOS 7. Sin embargo, el mismo color funciona bien en un iPad Air con iOS 8.
devios1
@ devios1 Esto probablemente se puede resolver primero serializando el color y luego deserializándolo usando NSKeyedArchiver, así:multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
Albert Renshaw
40
SWIFT 3 y 4
Descubrí que cgColor.components no siempre devolvería 4 valores de color, así que cambié esto para que los obtenga de un contenedor CIColor
¿No generó una advertencia por intentar lanzar implícitamente CGFloat para flotar? :)
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];
Desde iOS 2.0 hay un método de instancia privada en el UIColorllamado styleStringque devuelve una representación de cadena RGB o RGBA del color, incluso para colores como whiteColor fuera del espacio RGB.
En Swift, puede usar un encabezado puente para exponer la interfaz. Con Swift puro, deberá crear un @objcprotocolo con el método privado y unsafeBitCastUIColorcon el protocolo:
Usar HandyUIKit hace que esto sea realmente fácil :
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
También hay una opción similar para obtener hsbavalores :
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
Respuestas:
Estos enlaces proporcionan más detalles:
fuente
colors
, puede escribir algo como:CGFloat red = colors[0];
error: <EXPR>:3:1: error: 'CGColorGetComponents' has been replaced by property 'CGColor.components'
En iOS 5 puedes usar:
fuente
NSKeyedArchiver
, así:multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
SWIFT 3 y 4
Descubrí que cgColor.components no siempre devolvería 4 valores de color, así que cambié esto para que los obtenga de un contenedor CIColor
SWIFT 2
No es la forma más eficiente, por lo que no usaría esto donde una vista se volverá a dibujar constantemente.
fuente
Espero que esto sea de ayuda
fuente
Acabo de crear una categoría para esto.
Va algo como:
Parte de
eppz!kit
con más golosinas de UIColor .fuente
Gracias. Tuve que agregar el
const
al comienzo de la línea ya que estaba generando una advertencia.fuente
fuente
La versión Swift 3 de David Rees responde:
fuente
Puede utilizar componentes CIColor (swift 5)
esto también funciona para espacios de color que no son RGB
fuente
Desde iOS 2.0 hay un método de instancia privada en el
UIColor
llamadostyleString
que devuelve una representación de cadena RGB o RGBA del color, incluso para colores como whiteColor fuera del espacio RGB.C objetivo:
En Swift, puede usar un encabezado puente para exponer la interfaz. Con Swift puro, deberá crear un
@objc
protocolo con el método privado yunsafeBitCast
UIColor
con el protocolo:fuente
La respuesta más votada está desactualizada:
En su lugar, use
myUIColor.cgColor.components
fuente
Quería obtener el color de fondo del
UITableViewStyle
"UITableViewStyleGrouped", así que en elviewDidAppear:
método agregué el código:NSLog(@"%@", self.tableView.backgroundView.backgroundColor);
Hizo lo que anticipé y devolvió el registro:
UIDeviceRGBColorSpace 0.937255 0.937255 0.956863 1
En resumen, escriba
NSLog(@"%@", [UIColor whateverColor]);
fuente
Usar HandyUIKit hace que esto sea realmente fácil :
También hay una opción similar para obtener
hsba
valores :Simplemente instálelo usando Carthage y listo.
¡Espero que ayude!
fuente
Algunas macros útiles que hice para este y otros controles de color:
En su caso, solo usaría
Macros:
fuente
configura tu UIColor así
esto es para Xamarin ios ... pero seguro que hay un método como este en swift.
fuente