Je veux utiliser une UIColor comme couleur d'avant-plan pour un objet mais je ne sais pas comment convertir une UIColor en une couleur.
var myColor: UIColor
RoundedRectangle(cornerRadius: 5).foregroundColor(UIColor(myColor))
Je veux utiliser une UIColor comme couleur d'avant-plan pour un objet mais je ne sais pas comment convertir une UIColor en une couleur.
var myColor: UIColor
RoundedRectangle(cornerRadius: 5).foregroundColor(UIColor(myColor))
Je peux confirmer que cela fonctionne et que si le UIColor
est une couleur dynamique personnalisée, le Color
est également dynamique.
Color
possède un initialisateur natif qui prend un fichier UIColor
o NSColor
comme argument :
Color(.red) /* or any other UIColor/NSColor you need INSIDE parentheses */
<strong>NE PAS </strong>appelez <code>Color(UIColor.red)</code> explicitement <strong>! !! </strong>. Cela permettra de coupler votre code SwiftUI à l'interface de l'utilisateur. <code>UIKit</code> . Au lieu de cela, il suffit d'appeler <code>Color(.red)</code> Cela permettra de déduire automatiquement le module correct.
Aussi, notez cette différence :
Color.red /* this `red` is SwiftUI native `red` */
Color(.red) /* this `red` is UIKit `red` */
Color.red
y UIColor.red
son PAS même ! Ils ont valeurs différentes y avoir l'air différent les uns avec les autres. Donc ne supposez pas cela ne vaut rien
Ceux-ci sont égaux à la place : <code>SwiftUI.Color.Red == UIKit.UIColor.systemRed</code>
Vous pouvez également consulter <strong><a href="https://stackoverflow.com/a/62994482/5623035">Comment obtenir des composants RVB à partir de SwiftUI.Color ?</a></strong>
Vous pouvez implémenter une variable personnalisée pour qu'elle ressemble davantage à l'un des éléments suivants cgColor
y ciColor
extension UIColor {
/// The SwiftUI color associated with the receiver.
var suColor: Color { Color(self) }
}
donc ce serait comme :
UIColor.red // UIKit color
UIColor.red.suColor // SwiftUI color
UIColor.red.cgColor // Core graphic color
UIColor.red.ciColor // Core image color
Note : Cliquez sur ici pour voir comment convertir SwiftUI.Color
a UIColor
Utilisation de deux extensions d'aide :
Pour extraire des composants de UIColor
:
extension UIColor {
var rgba: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
getRed(&red, green: &green, blue: &blue, alpha: &alpha)
return (red, green, blue, alpha)
}
}
A init
con UIColor
:
extension Color {
init(uiColor: UIColor) {
self.init(red: Double(uiColor.rgba.red),
green: Double(uiColor.rgba.green),
blue: Double(uiColor.rgba.blue),
opacity: Double(uiColor.rgba.alpha))
}
}
Utilisation :
Color(uiColor: .red)
En Swift UI couleurs personnalisées avec une extension pratique :
extension UIColor {
struct purple {
static let normal = UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
static let light = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
static let dark = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
}
struct gray {
static let normal = UIColor(red:0.5, green:0.5 ,blue:0.5 , alpha:1.00)
static let dark = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
}
}
et en utilisant ceci :
var body: some View {
Text("Hello World")
.foregroundColor(Color(UIColor.purple.normal))
.background(Color(UIColor.gray.normal))
}
Edité avec Xcode 11.0 beta 6 et le code peut changer
Je suis un très ancien hobbyiste. Voici une méthode qui fonctionne pour moi. Oui, j'utilise les globaux pour les instructions réutilisables dans un fichier Constant.swift. Cet exemple est en ligne pour que ce soit plus facile à voir. Je ne dis pas que c'est la voie à suivre, c'est juste mon à l'ancienne.
import SwiftUI
// named color from the developer's pallet
let aluminumColor = Color(UIColor.lightGray)
// a custom color I use often
let butterColor = Color.init(red: 0.9993399978,
green: 0.9350042167,
blue: 0.5304131241)
// how I use this in a SwiftUI VStack:
Text("Fur People")
.font(.title)
.foregroundColor(aluminumColor)
.shadow(color: butterColor, radius: 4, x: 2, y: 2)
.minimumScaleFactor(0.75)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Je sais que je peux utiliser les propriétés individuelles mais je pensais qu'il y avait une méthode plus simple.
2 votes
J'ai compris, mais Apple a peut-être déjà fourni une méthode, alors j'ai pensé qu'il était légitime de demander. Je suis désolé si vous ne le pensez pas.
1 votes
J'ai découvert depuis qu'il n'y a pas de coercition intégrée, c'est pourquoi j'ai accepté la réponse pour aider d'autres personnes qui se posent la même question.