Cuando inicializo un CGColor y lo convierto a UIColor, no se procesa de la misma manera que un UIColor que se inicializa con los mismos valores. ¿Cómo puedo convertir entre CGColor y UIColor y mantener la misma apariencia?
Este código produce dos colores ligeramente diferentes (ver captura de pantalla), aunque esperaría que los colores fueran los mismos:
self.view.backgroundColor = UIColor(red: 19/255.0, green: 25/255.0, blue: 28/255.0, alpha: 1.0) let myCGColor = CGColor(red: 19/255.0, green: 25/255.0, blue: 28/255.0, alpha: 1.0) self.secondView.backgroundColor = UIColor(cgColor: myCGColor)
Eso es porque ese inicializador CGColor usa un espacio de color diferente. UIColor usa SRGB extendido mientras que CGColor usa RGB genérico.
Si desea obtener el mismo color, debe especificar el mismo espacio de color al inicializar su CGColor:
let cgColor = CGColor(colorSpace: .init(name: CGColorSpace.extendedSRGB)!, components: [19.0/255, 25.0/255, 28.0/255, 1.0])!
Para iOS13+ o macOS10.15+, puede usar el init(srgbRed:green:blue:alpha:)
:
let cgColor = CGColor(srgbRed: 19/255, green: 25/255, blue: 28/255, alpha: 1)