DEV Community

David Goyes
David Goyes

Posted on

SwiftUI #12: Color

Se define un color en SwiftUI con la vista Color:

Colores predefinidos

Color tiene un conjunto de colores predefinidos que se adapta al modo de interfaz (claro u obscuro). A continuación se listan unos cuantos.

Colores semánticos

Ejemplo

struct ContentView: View {
  var body: some View {
    Color(red: 0.5, green: 0.2, blue: 0.1)
      .frame(maxWidth: .infinity, maxHeight: 100)
      .padding()
  }
}
Enter fullscreen mode Exit fullscreen mode

Definición de colores personalizados

En el "Asset Catalog", se puede agregar un nuevo color con la opción "New Color Set". Aparecerán dos cuadrados con etiquetas "Any Appearance" y "Dark". El nombre del "Color set" se usa como referencia desde el código.

En el contenido del color debo asegurarme de elegir "Display P3" en lugar de "sRGB", y en "Input Method" debo elegir "8-bit Hexadecimal".

Después de definir el "Color set", se puede referenciar desde la vista con el nombre.

sRGB y Display P3 son espacios de color, pero no equivalentes: sRGB es el estándar histórico de la web y de la mayoría de pantallas, con una gama de colores más limitada que garantiza que un mismo color se vea prácticamente igual en cualquier dispositivo, mientras que Display P3 es un espacio más moderno con una gama mucho más amplia —especialmente en rojos, verdes y amarillos— usado por pantallas actuales como iPhone, iPad y Mac modernos, permitiendo colores más intensos y realistas; el problema es que cuando defines un color en P3, los dispositivos que no lo soportan lo convierten automáticamente a sRGB, lo que puede producir variaciones visibles, por lo que sRGB es más seguro para consistencia y P3 es mejor cuando controlas el entorno y buscas máxima fidelidad visual.

Modificadores comunes:

A continuación se listan algunos modificadores que cambian el color de algunas vistas:

Ejemplos

struct ContentView: View {
  var body: some View {
    VStack {
      Rectangle()
        .frame(width: 100, height: 100)
        .foregroundStyle(Color.red)
        .border(Color.blue, width: 5.0)
        .background(alignment: .bottom) {
          Rectangle()
            .frame(width: 120, height: 120)
            .foregroundStyle(Color.yellow)
        }
      Text("Hola")
        .foregroundStyle(Color.blue)
        .padding(20)
        .background(Color.blue.mix(with: Color.red, by: 0.5))
        .border(Color.yellow, width: 10)
        .overlay(alignment: .center) {
          Color(red: 1, green: 0.2, blue: 1, opacity: 0.2)
            .frame(width: 20, height: 20)
        }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)