TL; DR:
Schnell:
extension UIColor {
var lighterColor: UIColor {
return lighterColor(removeSaturation: 0.5, resultAlpha: -1)
}
func lighterColor(removeSaturation val: CGFloat, resultAlpha alpha: CGFloat) -> UIColor {
var h: CGFloat = 0, s: CGFloat = 0
var b: CGFloat = 0, a: CGFloat = 0
guard getHue(&h, saturation: &s, brightness: &b, alpha: &a)
else {return self}
return UIColor(hue: h,
saturation: max(s - val, 0.0),
brightness: b,
alpha: alpha == -1 ? a : alpha)
}
}
Verwendung:
let lightColor = somethingDark.lighterColor
Ziel c:
- (UIColor *)lighterColorRemoveSaturation:(CGFloat)removeS
resultAlpha:(CGFloat)alpha {
CGFloat h,s,b,a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a]) {
return [UIColor colorWithHue:h
saturation:MAX(s - removeS, 0.0)
brightness:b
alpha:alpha == -1? a:alpha];
}
return nil;
}
- (UIColor *)lighterColor {
return [self lighterColorRemoveSaturation:0.5
resultAlpha:-1];
}
@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:
- (UIColor *)lighterColor {
CGFloat h,s,b,a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a]) {
return [UIColor colorWithHue:h
saturation:MAX(s - 0.3, 0.0)
brightness:b /*MIN(b * 1.3, 1.0)*/
alpha:a];
}
return nil;
}