Ich wollte in der Lage sein, jede UIColor in einen Farbverlauf umzuwandeln. Die Absicht, dies zu tun, besteht darin, mithilfe von Core Graphics einen Farbverlauf zu zeichnen. Ich versuche, eine Farbe zu bekommen, sagen wir:
[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
und erhalten Sie eine UIColor, die einige Nuancen dunkler und einige Nuancen heller ist. Weiß jemand, wie man das macht? Danke dir.
objective-c
ios
core-graphics
gradient
uicolor
CoreCode
quelle
quelle
Antworten:
Verwenden Sie es so:
EDIT : als @Anchu Chimala wies darauf hin, für ein Maximum an Flexibilität, sollten diese Methoden als UIColor Kategorie implementiert werden. Nach der Idee von @ Riley ist es möglicherweise besser, die Farbe proportional dunkler oder heller zu machen, anstatt konstante Werte zu addieren oder zu subtrahieren. Wie @jrturton hervorhob, ist es nicht erforderlich, die RGB-Komponenten zu manipulieren. Es ist besser, die Helligkeitseigenschaft selbst zu ändern. Alles in allem:
quelle
getHue:saturation:brightness
Unterschrift von UIKit scheint es mit HSV anstelle von HSB zu funktionieren. Das Ändern der Helligkeit (also des Werts) in diesem Kontext funktioniert nicht. Zum Beispiel hat reines Rot (rgb (255,0,0)) eine Helligkeit / einen Wert von 1, wodurch ein Aufhellen durch die Helligkeit unmöglich wird. Ich habe stattdessen mit Änderungen an RGB-Werten gearbeitet.getHue:saturation:brightness:alpha
wird FALSE zurückgeben.luminance
Wert des LAB-Farbraums der wahre ist, den Sie berücksichtigen sollten, wenn Sie Farben heller / dunkler machen. Sehen Sie sich meine Antwort an, wie Sie sie nutzen und dieses Problem richtig lösen können.TL; DR:
Schnell:
Verwendung:
Ziel c:
@rchampourlier hatte Recht mit seinem Kommentar zu @ user529758 (Die akzeptierte Antwort) - Die Lösungen HSB (oder HSV) und RGB liefern völlig unterschiedliche Ergebnisse. RGB fügt nur Weiß hinzu (oder bringt die Farbe näher an Weiß), und die HSB-Lösung bringt die Farbe näher an den Rand der Brigtness-Skala - die im Grunde mit Schwarz beginnt und mit der reinen Farbe endet ...
Grundsätzlich macht die Helligkeit (Wert) die Farbe weniger oder mehr näher an Schwarz, während die Sättigung sie weniger oder mehr näher an Weiß bringt ...
Wie hier zu sehen:
Die Lösung, um eine Farbe tatsächlich heller zu machen (dh näher an Weiß ...), besteht darin, den Sättigungswert zu verkleinern , was zu folgender Lösung führt:
quelle
Swift Universal-Erweiterung für iOS und OS X , mit getHue :
Verwendung :
ODER (mit den Standardwerten):
Stichprobe :
quelle
let color = usingColorSpaceName(NSCalibratedRGBColorSpace)
getHue
color?.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha)
_
vor dem Wortbetrag. Sollte seinprivate func hueColorWithBrightnessAmount(_ amount: CGFloat) -> PXColor {
Ich wollte nur das gleiche Ergebnis in RGB liefern als
Dies ergibt das gleiche Ergebnis, AFAIK, als die Auswahl der Farbe in einem Farbverlauf "Farbe zu Weiß" oder "Farbe zu Schwarz" bei x% der Verlaufsgröße.
Zu diesem Zweck ist die Mathematik einfach:
Hier sind Beispiele mit einigen Farben
quelle
Die Lösung von user529758 in Swift:
Dunklere Farbe:
Hellere Farbe:
quelle
var darker: UIColor
zum Beispiel als Erweiterung der UIColor-Klasse deklariert würde .Wenn Sie die RGB-Farbe in das HSL-Farbmodell konvertieren , können Sie die L = Helligkeitskomponente von L = 0,0 (schwarz) über L = 0,5 (natürliche Farbe) bis L = 1,0 (weiß) variieren.
UIColor
kann HSL nicht direkt verarbeiten, aber es gibt Formeln zum Konvertieren von RGB <-> HSL.quelle
Keine der Lösungen posted recht für alle Farben und Schattierungen gearbeitet, aber dann stolperte ich über diese Bibliothek , die eine Reihe von sehr gut umgesetzt Erweiterungen UIColor bietet.
Insbesondere hat es eine Aufhellungsfunktion als Teil seiner HSL-Implementierung:
(UIColor *)lighten:(CGFloat)amount
- die perfekt funktioniert.quelle
Sebyddd
Lösung als Erweiterung:Verwendung:
quelle
Wenn Sie möchten, dass die Lösung von user529758 mit Graustufen funktioniert (wie
[UIColor lightGrayColor]
oder[UIColor darkGrayColor]
Sie müssen sie so verbessern:getHue:saturation:brightness:alpha
schlägt fehl (und kehrt zurückfalse
), wenn ein Grauton aufgerufen wird, daher müssen Sie verwendengetWhite:alpha
.quelle
UIColor-Erweiterung und Befestigung von leichterColorForColor
quelle
Alle anderen Antworten in diesem Thread verwenden entweder das RGB-Farbsystem oder ändern einfach den Farbton- oder Helligkeitswert des HSB-Systems . Wie in diesem großartigen Blog-Beitrag ausführlich erläutert, besteht die richtige Art, eine Farbe heller oder dunkler zu machen, darin, ihren
luminance
Wert zu ändern . Keine der anderen Antworten macht das. Wenn du es richtig machen willst, dann benutze meine Lösung oder schreibe deine eigene, nachdem du den Blog-Beitrag gelesen hast .Leider ist es ziemlich mühsam, standardmäßig eines der Attribute einer UIColor zu ändern . Außerdem unterstützt Apple in der
UIColor
Klasse nicht einmal einen LAB-basierten Farbraum wie HCL (derL
in LAB ist derluminance
Wert, den wir suchen).Die Verwendung von HandyUIKit (Installation über Karthago) bietet Unterstützung für HCL und erleichtert Ihnen das Leben erheblich :
Es gibt auch eine Option zum Anwenden einer relativen Änderung (empfohlen):
Beachten Sie, dass HandyUIKit Ihrem Projekt auch einige andere praktische UI-Funktionen hinzufügt. Weitere Informationen finden Sie in der README-Datei auf GitHub .
Ich hoffe, es hilft!
quelle
Ich bin mir nicht sicher, ob Sie nach einer Art Objective-C-Antwort suchen, aber basierend auf der Funktionsweise der von RGBA angegebenen Farben können Sie die RGB-Werte einfach nach einem beliebigen Faktor skalieren, um ein "helleres" oder "heller" zu erhalten "dunkler" Schatten. Zum Beispiel könnten Sie ein Blau haben:
Willst du ein dunkleres Blau? Multiplizieren Sie die RGB-Werte mit 0,9:
Voila. Oder vielleicht hast du eine Orange:
Wählen Sie einen anderen Skalierungsfaktor, z. B. 0,8:
Ist das der Effekt, den Sie suchen?
quelle
Getestet in Xcode 10 mit Swift 4.x für iOS 12
Beginnen Sie mit Ihrer Farbe als UIColor und wählen Sie einen Verdunkelungsfaktor (als CGFloat).
Der Typ CGColor verfügt über einen optionalen Wert,
components
der die Farbe in RGBA aufteilt (als CGFloat-Array mit Werten zwischen 0 und 1). Anschließend können Sie eine UIColor mithilfe von RGBA-Werten aus der CGColor rekonstruieren und bearbeiten.In diesem Beispiel wurde jeder RGB-Wert durch 2 geteilt, wodurch die Farbe halb so dunkel war wie zuvor. Der Alpha-Wert blieb gleich, aber Sie können alternativ den Verdunkelungsfaktor auf den Alpha-Wert und nicht auf den RGB-Wert anwenden.
quelle
Swift 5
quelle
Idealerweise sollten die Funktionen in einer
UIColor
Erweiterung mit dem NamenUIColor+Brightness.swift
und gekapselt sein und eine konfigurierbare Helligkeit aufweisen - siehe Beispiel unten:quelle
Ich rendere farbige Zellen basierend auf einem Statuswert:
Dafür habe ich eine schnelle Erweiterung geschrieben, die auf einem alten Objektcode basiert, nachdem ich einen Fehler mit CryingHippos Vorschlag erhalten habe:
Das gleiche gilt auch für
NSColor
. Ersetzen Sie einfachUIColor
mitNSColor
.quelle
Hier ist eine UIColor-Kategorie, mit der Sie auch das Ausmaß der Farbänderung steuern können.
quelle
Eine Swift-Erweiterung basierend auf der Antwort von @Sebyddd:
quelle
Für dunklere Farben ist dies die einfachste: theColor = [theColor shadowWithLevel: s]; //s:0.0 bis 1.0
quelle