通常、iOSでSwiftの拡張機能を使用してカスタムUIColorsを使用しますが、iOS11/XCode9では色セットを作成できます。どのように使用できますか?
更新-ヒント
@Cœurが言うように、de colorをドラッグ&ドロップし、UIColorオブジェクトのように使用でき、可能な解決策は拡張機能として使用できます。
または定数として:
次のように、アセットイメージへのUIImageアクセスのようにアクセスできるかどうかを知りたいです。
UIImage(named: "image-name") -> UIColor(named: "color-name")
UIColor(named: "myColor")
出典: WWDC 2017セッション237-MapKitの新機能
警告:プロジェクトのDeployment TargetはiOS 11.0に設定する必要があります。
(質問の更新に対する短い答え:Xcode 9.0には UIColor(named: "MyColor")
があります)
元の質問に答える:
ソースコードを見ると、色リテラルに変換されます。
#colorLiteral(red: 0, green: 0.6378085017, blue: 0.8846047521, alpha: 1)
赤、緑、青の値がどのように異なるかに気づきましたか?色空間Display P3
を使用してそれらを定義したが、colorLiteralは色空間sRGB
を使用しているためです。
カラーセットをアセットカタログに追加し、名前を付けて、属性インスペクターで色を設定し、UIColor(named: "MyColor")
を使用してコードで呼び出します。
アセットカタログビューアで、メインパネルの右下にあるプラスボタンをクリックし、新しいカラーセットを選択します
白い四角をクリックして、Attributes Inspector(右ペインの右端のアイコン)を選択します
そこから名前を付けて色を選択できます。
UIColor(named: "MyColor")
で呼び出します。これはオプションを返すので、ほとんどの場合、展開する必要があります(これはおそらく、アセットカタログに色が存在することがわかっていれば、強制的に展開できる数少ないケースの1つです)。UIColor(named: "appBlue")
を使用する必要があります。
また、簡単なアクセスのためにUIColor拡張機能で関数を作成できます。
enum AssetsColor {
case yellow
case black
case blue
case gray
case green
case lightGray
case seperatorColor
case red
}
extension UIColor {
static func appColor(_ name: AssetsColor) -> UIColor? {
switch name {
case .yellow:
return UIColor(named: "appYellow")
case .black:
return UIColor(named: "appBlack")
case .blue:
return UIColor(named: "appBlue")
case .gray:
return UIColor(named: "appGray")
case .lightGray:
return UIColor(named: "appLightGray")
case .red:
return UIColor(named: "appRad")
case .seperatorColor:
return UIColor(named: "appSeperatorColor")
case .green:
return UIColor(named: "appGreen")
}
}
このように使用できます
userNameTextField.textColor = UIColor.appColor(.gray)
// iOS
let color = UIColor(named: "SillyBlue")
// macOS
let color = NSColor(named: "SillyBlue")
この方法で簡単にアクセスできます(Swift 4)
enum AssetsColor: String {
case backgroundGray
case blue
case colorAccent
case colorPrimary
case darkBlue
case yellow
}
extension UIColor {
static func appColor(_ name: AssetsColor) -> UIColor? {
return UIColor(named: name.rawValue)
}
}