UIColor torna possível customizar a cor para Dark Mode, dá um conjunto semântico de cores "da Apple", e também torna possível definir não só a cor, mas também o padrão de preenchimento do espaço, que meio que grita para nós que UIColor não é uma cor. Vamos dar uma olhada rápida nesses corredores UIColor.
UIColor é uma classe que armazena dados de cor e transparência. As cores no iOS podem ser representadas em diferentes espaços de cores, sendo o mais famoso o RGB. Na verdade, a própria cor é armazenada na propriedade cgColor da classe CGColor. Existem várias entidades no iOS que podem armazenar informações de cores - cada uma para sua própria estrutura:
para UIKit é a classe UIColor,
para SwiftUI, é uma estrutura de cores,
para Core Graphics, esta é a classe CGColor,
para Core Image, esta é a classe CIColor
Neste artigo, tentarei falar sobre a classe UIColor, que faz parte do framework UIKit.
Cores do sistema
O UIKit possui algumas cores predefinidas que você pode usar em seu projeto. Por exemplo, verde UIColor.green ou geralmente apenas .green é o suficiente. Escrever assim usará uma cor específica com valores RGB de 0,0, 1,0, 0,0 e um nível de transparência de 1,0. Mas em UIColor, a cor UIColor.systemGreen também é definida. Como é diferente do UIColor.green usual?
Desde o iOS 13.0, o modo escuro apareceu. O usuário pode escolher nas configurações do sistema em qual tema de cor é mais cômodo trabalhar - em um tema claro ou em um escuro. E a cor verde para esses modos será um pouco diferente. Além disso, para uma percepção confortável, o usuário pode escolher um modo de alto contraste que aumenta o contraste entre os elementos da interface e o fundo. E a cor verde para este modo também será diferente.
, , , Apple, , . - , , "system...":
systemBlue
systemIndigo
systemOrange
systemPink
systemPurple
systemRed
systemTeal
systemYellow
- - , , .
, , - , , ..
systemGray
systemGray2
systemGray3
systemGray4
systemGray5
systemGray6
, , . .
Black White, . .
, . UIKit tintColor, , - , , , UISegmentControl .. - , brandColor primaryBrandColor/secondaryBrandColor. .
, - . , UILabel . , UILabel .red, :
let primaryTextColor = UIColor.red
UILabel :
label.textColor = primaryTextColor
- , . primaryTextColor.
. , .
UIKit
Apple , . , . UIKit .
:
label -
secondaryLabel -
tertiaryLabel -
quaternaryLabel -
, , secondaryLabel , tertiaryLabel .
:
systemFill
secondarySystemFill
tertiarySystemFill
quaternarySystemFill
Apple / , , ..
:
placeholderText
:
systemBackground
secondarySystemBackground
tertiarySystemBackground
.
:
systemGroupedBackground
secondarySystemGroupedBackground
tertiarySystemGroupedBackground
.grouped .
:
separator
opaqueSeparator
:
link
, :
darkText
lightText
UIKit , , .
, Dark Light
- XCode Assets Color Set, Dark Light Mode Appearances. , .
:
let color = UIColor(named: "ColorName")
" " iOS.
- , .
UIColor:
init(dynamicProvider: @escaping (UITraitCollection) -> UIColor)
UITraitCollection - , Dark Light , .. userInterfaceStyle .
:
let color = UIColor { traitCollection -> UIColor in
switch traitCollection.userInterfaceStyle {
case .light, .unspecified: return .white
case .dark: return .black
}
}
UIColor :
HSB, RGB
UIColor
- UIColor ...
init(patternImage image: UIImage)
UIColor, , . , , UILabel, - (. ).
- , . " ", " ".
Embora UIColor seja uma classe bastante simples, ela fornece recursos de gerenciamento de cores com base nas configurações atuais. Além disso, como vimos, ele pode definir não apenas a cor, mas também o método geral de preenchimento do espaço. Para ajudar os desenvolvedores, a Apple fornece um conjunto de cores semânticas que simplificam o desenvolvimento e permitem que você altere ligeiramente a cor dos elementos da interface.