Normalerweise verwende ich benutzerdefinierte UIColors unter iOS mit Erweiterungen mit Swift, aber jetzt können wir mit iOS 11 / Xcode 9 Farbsätze erstellen. Wie können wir sie verwenden?
Update - Tipp
Wie @ Cœur sagt, können wir die Farbe per Drag & Drop verschieben und wie ein UIColor-Objekt verwenden. Eine mögliche Lösung könnte darin bestehen, sie als Erweiterung zu verwenden:
Oder als Konstante:
Jetzt möchte ich wissen, ob wir wie ein UIImage-Zugriff auf ein Asset-Image auf sie zugreifen können oder nicht.
UIImage(named: "image-name") -> UIColor(named: "color-name")
swift
uicolor
asset-catalog
ios11
xcode9-beta
elGeekalpha
quelle
quelle
(kurze Antwort auf das Frage-Update: gibt es
UIColor(named: "MyColor")
in Xcode 9.0)Beantwortung der ursprünglichen Frage:
Beim Betrachten des Quellcodes wird es in ein Farbliteral übersetzt:
#colorLiteral(red: 0, green: 0.6378085017, blue: 0.8846047521, alpha: 1)
Sie bemerken, wie unterschiedlich die Werte von Rot, Grün und Blau sind? Das liegt daran, dass ich sie
Display P3
im Farbraum definiert habe , aber das colorLiteral den Farbraum verwendetsRGB
.quelle
UIColor(named:)
, es ist Teil von UIKit, das ab iOS 11 in iOS integriert ist. Es scheint ein subtiler Punkt zu sein, aber es ist wichtig. Xcode kann UIKit keine Methoden hinzufügen.In Xcode 11 drücken Sie Befehl + Umschalt + L, es öffnet sich ein Snippet, wählen Sie das letzte aus, wie ich es im Drag & Drop des Bildes gezeigt habe.
quelle
Kurzfassung
Fügen Sie einem Asset-Katalog einen Farbsatz hinzu, benennen Sie ihn und legen Sie Ihre Farbe im Attributinspektor fest. Rufen Sie ihn dann in Ihrem Code mit auf
UIColor(named: "MyColor")
.Vollständige Anweisungen
Klicken Sie im Asset-Katalog-Viewer unten rechts im Hauptfenster auf die Plus-Schaltfläche und wählen Sie Neuer Farbsatz
Klicken Sie auf das weiße Quadrat und wählen Sie den Attributinspektor aus (Symbol ganz rechts im rechten Bereich).
Von dort aus können Sie Ihre Farbe benennen und auswählen.
Um es in Ihrem Code zu verwenden, rufen Sie es mit auf
UIColor(named: "MyColor")
. Dies gibt ein optionales Element zurück, sodass Sie es in den meisten Fällen auspacken müssen (dies ist wahrscheinlich einer der wenigen Fälle, in denen ein erzwungenes Auspacken akzeptabel ist, vorausgesetzt, Sie wissen, dass die Farbe in Ihrem Asset-Katalog vorhanden ist).quelle
Sie müssen verwenden
UIColor(named: "appBlue")
.Außerdem können Sie in der UIColor-Erweiterung eine Funktion für den einfachen Zugriff erstellen.
enum AssetsColor { case yellow case black case blue case gray case green case lightGray case separatorColor 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: "appRed") case .separatorColor: return UIColor(named: "appSeparatorColor") case .green: return UIColor(named: "appGreen") } } }
Sie können es so verwenden:
userNameTextField.textColor = UIColor.appColor(.gray)
quelle
enum AssetsColor: String
und Namen als Rohwertecase yellow = "appYellow"
switch
UIColor(named: name.rawValue)
Sie können diese Methode für den einfachen Zugriff verwenden (Swift 4 & Swift 5).
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) } }
quelle
// iOS let color = UIColor(named: "SillyBlue") // macOS let color = NSColor(named: "SillyBlue")
quelle
Bei Ihrer Frage, ob Sie mit Literal auf Farbressourcen wie das Bild zugreifen können
colorliteral
, können Sie ab Xcode 10.2 die Farbe auswählen, die Sie verwenden möchten, und zwar unter Ihrem Asset Manager.quelle
color literal
deinen Editor ein. Zum Beispiel: label.textColor = FarbliteralFalls beim Laden von Farben in einem Swift-Paket eine Verzögerung auftritt, wenn Sie Folgendes verwenden
UIColor(named:)
:Die obigen Antworten gelten für ein reguläres Projekt. Wenn Sie jedoch Assets in einem schnellen Paket verwenden, kann es beim Laden der Farben zu einer Verzögerung beim Laden kommen
UIColor(named: "example_name")
. Wenn Sie eineUIColor(named: "background", in: Bundle.module, compatibleWith: .current)
Überladung verwenden, die auf das Modul abzielt, werden die Farben sofort und ohne Verzögerung geladen.Hinweis: Ich habe Erfahrung mit Xcode 12.1.
quelle