En Objective-C, nous utilisons ce code pour définir des codes de couleur RVB pour les vues:
#define UIColorFromRGB(rgbValue)
[UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
view.backgroundColor=UIColorFromRGB(0x209624);
Comment puis-je l'utiliser dans Swift?
Voici une version Swift de cette fonction (pour obtenir une représentation UIColor d'une valeur UInt
):
func UIColorFromRGB(rgbValue: UInt) -> UIColor {
return UIColor(
red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
alpha: CGFloat(1.0)
)
}
view.backgroundColor = UIColorFromRGB(0x209624)
Je voulais mettre
cell.backgroundColor = UIColor.colorWithRed(125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0)
mais ça n'a pas marché.
Alors j'ai utilisé:
Pour Swift
cell.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)
C'est donc la solution de contournement que j'ai trouvée.
J'ai bien aimé la réponse de Nate Cook mais je voulais quelque chose d'un peu plus idiomatique. Je pense que c'est un très bon cas d'utilisation pour un initialiseur de commodité via une extension personnalisée.
// UIColorExtensions.Swift
import Foundation
import UIKit
extension UIColor {
convenience init(rgb: UInt) {
self.init(
red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0,
green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(rgb & 0x0000FF) / 255.0,
alpha: CGFloat(1.0)
)
}
}
Cela peut maintenant être utilisé comme ceci:
view.backgroundColor = UIColor(rgb: 0x209624)
Je ne recommanderais que les correctifs des classes UIKit comme ceci dans votre propre code client, pas dans les bibliothèques.
myLabel.backgroundColor = UIColor(red: 50.0/255, green: 150.0/255, blue: 65.0/255, alpha: 1.0)
La méthode la plus simple pour ajouter des couleurs par programme consiste à utiliser ColorLiteral.
Il suffit d’ajouter la propriété ColorLiteral comme indiqué dans l’exemple, Xcode vous invitera à choisir toute une liste de couleurs. L'avantage de cela est un code inférieur, add HEX ou RGB. Vous obtiendrez également les couleurs récemment utilisées à partir du storyboard.
Si vous partez d'une chaîne (pas hex), il s'agit d'une fonction qui prend une chaîne hex et renvoie une UIColor.
(vous pouvez entrer des chaînes hexadécimales avec le format suivant: #ffffff
ou ffffff
)
Utilisation:
var color1 = hexStringToUIColor("#d3d3d3")
Swift 4:
func hexStringToUIColor (hex:String) -> UIColor {
var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
if (cString.hasPrefix("#")) {
cString.remove(at: cString.startIndex)
}
if ((cString.count) != 6) {
return UIColor.gray
}
var rgbValue:UInt32 = 0
Scanner(string: cString).scanHexInt32(&rgbValue)
return UIColor(
red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
alpha: CGFloat(1.0)
)
}
Swift 3:
func hexStringToUIColor (hex:String) -> UIColor {
var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
if (cString.hasPrefix("#")) {
cString.remove(at: cString.startIndex)
}
if ((cString.characters.count) != 6) {
return UIColor.gray
}
var rgbValue:UInt32 = 0
Scanner(string: cString).scanHexInt32(&rgbValue)
return UIColor(
red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
alpha: CGFloat(1.0)
)
}
Swift 2:
func hexStringToUIColor (hex:String) -> UIColor {
var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet() as NSCharacterSet).uppercaseString
if (cString.hasPrefix("#")) {
cString = cString.substringFromIndex(cString.startIndex.advancedBy(1))
}
if ((cString.characters.count) != 6) {
return UIColor.grayColor()
}
var rgbValue:UInt32 = 0
NSScanner(string: cString).scanHexInt(&rgbValue)
return UIColor(
red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
alpha: CGFloat(1.0)
)
}
Pour Xcode 9, utilisez UIColor
avec les valeurs RVB.
shareBtn.backgroundColor = UIColor( red: CGFloat(92/255.0), green: CGFloat(203/255.0), blue: CGFloat(207/255.0), alpha: CGFloat(1.0) )
Aperçu:
Voir la documentation supplémentaire Apple sur UIColor .
J'ai utilisé ce qui suit dans Swift.
let appRedColor = UIColor(red: 200.0/255.0, green: 16.0/255.0, blue: 46.0/255.0, alpha: 1.0)
let appSilverColor = UIColor(red: 236.0/255.0, green: 236.0/255.0, blue: 236.0/255.0, alpha: 1.0)
let appWhiteColor = UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0)
let appNavyColor = UIColor(red: 19.0/255.0, green: 41.0/255.0, blue: 75.0/255.0, alpha: 1.0)
button.layer.backgroundColor = UIColor(red: 112.0/255, green: 86.0/255, blue: 164.0/255, alpha: 1.0).cgColor
ajout d'une option Swift 3:
cell.layer.borderColor = UIColor (red: 192.0/255.0, green: 192.0/255.0, blue: 197/255.0, alpha: 1.0).cgColor
Cela a fonctionné pour moi à Swift. Essaye ça
bottomBorder.borderColor = UIColor (red: 255.0/255.0, green: 215.0/255.0, blue: 60/255.0, alpha: 1.0).CGColor
solution pour le format argb:
// UIColorExtensions.Swift
import UIKit
extension UIColor {
convenience init(argb: UInt) {
self.init(
red: CGFloat((argb & 0xFF0000) >> 16) / 255.0,
green: CGFloat((argb & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(argb & 0x0000FF) / 255.0,
alpha: CGFloat((argb & 0xFF000000) >> 24) / 255.0
)
}
}
usage:
var clearColor: UIColor = UIColor.init(argb: 0x00000000)
var redColor: UIColor = UIColor.init(argb: 0xFFFF0000)
Vous pouvez utiliser ceci:
//The color RGB #85CC4B
let newColor = UIColor(red: CGFloat(0x85)/255
,green: CGFloat(0xCC)/255
,blue: CGFloat(0x4B)/255
,alpha: 1.0)
Vous ne pouvez pas utiliser de macros complexes telles que #define UIColorFromRGB(rgbValue)
dans Swift. Le remplacement de la macro simple dans Swift est des constantes globales comme
let FADE_ANIMATION_DURATION = 0.35
Néanmoins, les macros complexes acceptant les paramètres ne sont pas prises en charge par Swift. vous pouvez utiliser des fonctions à la place
Les macros complexes sont utilisées en C et Objective-C mais n'ont pas d'équivalent en Swift. Les macros complexes sont des macros qui ne définissent pas de constantes, y compris des macros entre parenthèses, de type fonction. Vous utilisez des macros complexes en C et en Objective-C pour éviter les contraintes de vérification de type ou éviter de ressaisir de grandes quantités de code standard. Cependant, les macros peuvent rendre le débogage et le refactoring difficiles. Dans Swift, vous pouvez utiliser des fonctions et des génériques pour obtenir les mêmes résultats sans aucun compromis. Par conséquent, les macros complexes contenues dans les fichiers source C et Objective-C ne sont pas mises à la disposition de votre code Swift.
Extrait de Utilisation de Swift avec du cacao et de l’Objectif C
Vérifiez la réponse de @Nate Cooks pour que la version Swift de cette fonction soit utilisée ici
La réponse de Nate Cook est tout à fait juste… .. Pour plus de souplesse, je garde les fonctions suivantes dans mon pack:
func getUIColorFromRGBThreeIntegers(red: Int, green: Int, blue: Int) -> UIColor {
return UIColor(red: CGFloat(Float(red) / 255.0),
green: CGFloat(Float(green) / 255.0),
blue: CGFloat(Float(blue) / 255.0),
alpha: CGFloat(1.0))
}
func getUIColorFromRGBHexValue(value: Int) -> UIColor {
return getUIColorFromRGBThreeIntegers(red: (value & 0xFF0000) >> 16,
green: (value & 0x00FF00) >> 8,
blue: value & 0x0000FF)
}
func getUIColorFromRGBString(value: String) -> UIColor {
let str = value.lowercased().replacingOccurrences(of: "#", with: "").
replacingOccurrences(of: "0x", with: "");
return getUIColorFromRGBHexValue(value: Int(str, radix: 16)!);
}
Et voici comment je les utilise:
// All three of them are identical:
let myColor1 = getUIColorFromRGBHexValue(value: 0xd5a637)
let myColor2 = getUIColorFromRGBString(value: "#D5A637")
let myColor3 = getUIColorFromRGBThreeIntegers(red: 213, green: 166, blue: 55)
J'espère que cela vous aidera ... Tout est testé avec Swift 3/Xcode 8.
Je peux voir que sa réponse a déjà été donnée, mais j'espère toujours qu'un seul paquebot aidera de manière plus efficace.
import UIKit
let requiredColor = UIColor(red: CGFloat((rgbValue & 0xFF0000) >> 16)/255,
green: CGFloat((rgbValue & 0x00FF00) >> 8)/255,
blue: CGFloat(rgbValue & 0x0000FF)/255, alpha :1)
Mise à jour: : Modifications apportées conformément à l'exemple expliqué par l'auteur de la question afin de fournir des valeurs hexadécimales
Dans Swift3, si vous commencez avec une couleur que vous avez déjà choisie, vous pouvez obtenir la valeur RVB en ligne ( http://imagecolorpicker.com ) et utiliser les valeurs définies comme UIColor. Cette solution les implémente en arrière-plan:
@IBAction func blueBackground(_ sender: Any) {
let blueColor = UIColor(red: CGFloat(160/255), green: CGFloat(183.0/255), blue: CGFloat(227.0/255), alpha: 1)
view.backgroundColor = blueColor
@Vadym a mentionné ce qui précède dans les commentaires et il est important de définir le CGFloat avec un seul point décimal.