Suche…
Erstellen eines UIColor
Es gibt viele Möglichkeiten, eine UIColor
erstellen:
Schnell
Verwenden einer der vordefinierten Farben:
let redColor = UIColor.redColor() let blueColor: UIColor = .blueColor() // In Swift 3, the "Color()" suffix is removed: let redColor = UIColor.red let blueColor: UIColor = .blue
Wenn der Compiler bereits weiß, dass es sich bei der Variablen um eine Instanz von
UIColor
, können Sie den gesamten Typ überspringen:let view = UIView() view.backgroundColor = .yellowColor()
Verwenden des Graustufenwerts und des Alphas:
let grayscaleColor = UIColor(white: 0.5, alpha: 1.0)
Farbton, Sättigung, Helligkeit und Alpha verwenden:
let hsbColor = UIColor( hue: 0.4, saturation: 0.3, brightness: 0.7, alpha: 1.0 )
Verwenden der RGBA-Werte:
let rgbColor = UIColor( red: 30.0 / 255, green: 70.0 / 255, blue: 200.0 / 255, alpha: 1.0 )
Verwenden eines Musterbildes:
let patternColor = UIColor(patternImage: UIImage(named: "myImage")!)
Ziel c
Verwenden einer der vordefinierten Farben:
UIColor *redColor = [UIColor redColor];
Verwenden des Graustufenwerts und des Alphas:
UIColor *grayscaleColor = [UIColor colorWithWhite: 0.5 alpha: 1.0];
Farbton, Sättigung, Helligkeit und Alpha verwenden:
UIColor *hsbColor = [UIColor colorWithHue: 0.4 saturation: 0.3 brightness: 0.7 alpha: 1.0 ];
Verwenden der RGBA-Werte:
UIColor *rgbColor = [UIColor colorWithRed: 30.0 / 255.0 green: 70.0 / 255.0 blue: 200.0 / 255.0 alpha: 1.0 ];
Verwenden eines Musterbildes:
UIColor *pattenColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myImage.png"]];
Undokumentierte Methoden
Es gibt eine Vielzahl von undokumentierten Methoden für UIColor
die alternative Farben oder Funktionen UIColor
. Diese finden Sie in der privaten Header-Datei von UIColor
. Ich werde die Verwendung von zwei privaten Methoden dokumentieren, styleString()
und _systemDestructiveTintColor()
.
styleString
Seit iOS 2.0 gibt es auf UIColor
eine private UIColor
namens styleString
die eine RGB- oder RGBA-Zeichenfolgendarstellung der Farbe whiteColor
, selbst für Farben wie whiteColor
außerhalb des RGB- whiteColor
.
Ziel c:
@interface UIColor (Private)
- (NSString *)styleString;
@end
// ...
[[UIColor whiteColor] styleString]; // rgb(255,255,255)
[[UIColor redColor] styleString]; // rgb(255,0,0)
[[UIColor lightTextColor] styleString]; // rgba(255,255,255,0.600000)
In Swift können Sie einen Überbrückungsheader verwenden, um die Schnittstelle anzuzeigen. Mit pure Swift müssen Sie ein @objc
Protokoll mit der privaten Methode und unsafeBitCast
UIColor
mit dem Protokoll UIColor
:
@objc protocol UIColorPrivate {
func styleString() -> String
}
let white = UIColor.whiteColor()
let red = UIColor.redColor()
let lightTextColor = UIColor.lightTextColor()
let whitePrivate = unsafeBitCast(white, UIColorPrivate.self)
let redPrivate = unsafeBitCast(red, UIColorPrivate.self)
let lightTextColorPrivate = unsafeBitCast(lightTextColor, UIColorPrivate.self)
whitePrivate.styleString() // rgb(255,255,255)
redPrivate.styleString() // rgb(255,0,0)
lightTextColorPrivate.styleString() // rgba(255,255,255,0.600000)
_systemDestructiveTintColor()
Es gibt eine undokumentierte Klassenmethode für UIColor
Namen _systemDestructiveTintColor
die die rote Farbe _systemDestructiveTintColor
die von den Schaltflächen des destruktiven Systems verwendet wird:
let red = UIColor.performSelector("_systemDestructiveTintColor").takeUnretainedValue()
Es gibt ein nicht verwaltetes Objekt zurück, für das Sie .takeUnretainedValue()
aufrufen .takeUnretainedValue()
, da der .takeUnretainedValue()
nicht auf unser eigenes Objekt übertragen wurde.
Wie bei jeder undokumentierten API sollten Sie beim Verwenden dieser Methode Vorsicht walten lassen:
if UIColor.respondsToSelector("_systemDestructiveTintColor") {
if let red = UIColor.performSelector("_systemDestructiveTintColor").takeUnretainedValue() as? UIColor {
// use the color
}
}
oder mit einem Protokoll:
@objc protocol UIColorPrivateStatic {
func _systemDestructiveTintColor() -> UIColor
}
let privateClass = UIColor.self as! UIColorPrivateStatic
privateClass._systemDestructiveTintColor() // UIDeviceRGBColorSpace 1 0.231373 0.188235 1
Farbe mit Alpha-Komponente
Sie können die Deckkraft auf eine bestimmte UIColor
ohne mithilfe des Initialisierers init(red:_,green:_,blue:_,alpha:_)
eine neue erstellen zu müssen.
Schnell
let colorWithAlpha = UIColor.redColor().colorWithAlphaComponent(0.1)
Swift 3
//In Swift Latest Version
_ colorWithAlpha = UIColor.red.withAlphaComponent(0.1)
Ziel c
UIColor * colorWithAlpha = [[UIColor redColor] colorWithAlphaComponent:0.1];
Benutzerdefinierte Attribute auf den CGColor-Datentyp anwenden lassen
Standardmäßig akzeptiert Interface Builder den CGColor
Datentyp nicht, um das Hinzufügen von CGColor
mit benutzerdefinierten Attributen im Interface Builder zu ermöglichen. Vielleicht möchten Sie eine Erweiterung wie diese verwenden:
Schnelle Erweiterung:
extension CALayer {
func borderUIColor() -> UIColor? {
return borderColor != nil ? UIColor(CGColor: borderColor!) : nil
}
func setBorderUIColor(color: UIColor) {
borderColor = color.CGColor
}
}
Das neue benutzerdefinierte Attribut (borderUIColor) wird problemlos erkannt und angewendet.
Erstellen eines UIColor aus Hexadezimalzahl oder Zeichenfolge
Sie können eine UIColor
aus einer Hexadezimalzahl oder einem String erstellen, z. B. 0xff00cc, "#FFFFFF".
Schnell
Int Wert
extension UIColor {
convenience init(hex: Int, alpha: CGFloat = 1.0) {
let r = CGFloat((hex >> 16) & 0xff) / 255
let g = CGFloat((hex >> 08) & 0xff) / 255
let b = CGFloat((hex >> 00) & 0xff) / 255
self.init(red: r, green: g, blue: b, alpha: alpha)
}
}
Beispiel:
let color = UIColor(hex: 0xff00cc, alpha: 1.0)
Beachten Sie, dass für alpha
der Standardwert 1.0
ist. Er kann daher wie folgt verwendet werden:
let color = UIColor(hex: 0xff00cc)
String-Wert
extension UIColor {
convenience init(hexCode: String) {
let hex = hexCode.stringByTrimmingCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet)
var int = UInt32()
NSScanner(string: hex).scanHexInt(&int)
let a, r, g, b: UInt32
switch hex.characters.count {
case 3:
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
case 6:
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
case 8:
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
default:
(a, r, g, b) = (1, 1, 1, 0)
}
self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
}
}
Verwendungsbeispiel:
Hex mit Alpha
let color = UIColor("#80FFFFFF")
Hex ohne Alpha ( color
Alpha entspricht 1,0)
let color = UIColor("#FFFFFF")
let color = UIColor("#FFF")
Ziel c
Int Wert
@interface UIColor (Hex)
+ (UIColor *)colorWithHex:(NSUInteger)hex alpha:(CGFloat)alpha;
@end
@implementation UIColor (Hex)
+ (UIColor *)colorWithHex:(NSUInteger)hex alpha:(CGFloat)alpha {
return [UIColor colorWithRed:((CGFloat)((hex & 0xFF0000) >> 16))/255.0
green:((CGFloat)((hex & 0xFF00) >> 8))/255.0
blue:((CGFloat)(hex & 0xFF))/255.0
alpha:alpha];
}
@end
Beispiel:
UIColor *color = [UIColor colorWithHex:0xff00cc alpha:1.0];
String-Wert
- (UIColor*) hex:(NSString*)hexCode {
NSString *noHashString = [hexCode stringByReplacingOccurrencesOfString:@"#" withString:@""];
NSScanner *scanner = [NSScanner scannerWithString:noHashString];
[scanner setCharactersToBeSkipped:[NSCharacterSet symbolCharacterSet]];
unsigned hex;
if (![scanner scanHexInt:&hex]) return nil;
int a;
int r;
int g;
int b;
switch (noHashString.length) {
case 3:
a = 255;
r = (hex >> 8) * 17;
g = ((hex >> 4) & 0xF) * 17;
b = ((hex >> 0) & 0xF) * 17;
break;
case 6:
a = 255;
r = (hex >> 16);
g = (hex >> 8) & 0xFF;
b = (hex) & 0xFF;
break;
case 8:
a = (hex >> 24);
r = (hex >> 16) & 0xFF;
g = (hex >> 8) & 0xFF;
b = (hex) & 0xFF;
break;
default:
a = 255.0;
r = 255.0;
b = 255.0;
g = 255.0;
break;
}
return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:a / 255];
}
Verwendungsbeispiel:
Hex mit Alpha
UIColor* color = [self hex:@"#80FFFFFF"];
Hex ohne Alpha ( color
Alpha entspricht 1)
UIColor* color = [self hex:@"#FFFFFF"];
UIColor* color = [self hex:@"#FFF"];
Angepasste Helligkeit der Farbe von UIColor
Das folgende Codebeispiel gibt Ihnen eine angepasste Version dieser Farbe, wobei ein höherer Prozentsatz heller und ein niedrigerer Prozentsatz dunkler ist.
Ziel c
+ (UIColor *)adjustedColorForColor:(UIColor *)c : (double)percent
{
if (percent < 0) percent = 0;
CGFloat r, g, b, a;
if ([c getRed:&r green:&g blue:&b alpha:&a])
return [UIColor colorWithRed:MAX(r * percent, 0.0)
green:MAX(g * percent, 0.0)
blue:MAX(b * percent, 0.0)
alpha:a];
return nil;
}
Schnell
func adjustedColorForColor( c: UIColor, var percent: CGFloat) -> UIColor {
if percent < 0 {
percent = 0
}
var r,g,b,a: CGFloat
r = 0.0
g = 0.0
b = 0.0
a = 0.0
if c.getRed(&r, green: &g, blue: &b, alpha: &a) {
return UIColor(red: max(r * percent, 0.0), green: max(g * percent, 0.0), blue: max(b * percent, 0.0), alpha: a)
}
return UIColor()
}
UIColor aus einem Bildmuster
Sie können ein UIColor
Objekt mithilfe eines Bildmusters mithilfe der UIColor(patternImage:_)
Methode UIColor(patternImage:_)
.
btn.backgroundColor = UIColor(patternImage: UIImage(named: "image")!)
Hellerer und dunklerer Farbton einer bestimmten UIColor
Im folgenden Codebeispiel wird gezeigt, wie Sie eine hellere und dunklere Schattierung einer bestimmten Farbe erzielen können, die in Anwendungen mit dynamischen Designs nützlich ist
Für dunklere Farben
+ (UIColor *)darkerColorForColor:(UIColor *)c
{
CGFloat r, g, b, a;
if ([c getRed:&r green:&g blue:&b alpha:&a])
return [UIColor colorWithRed:MAX(r - 0.2, 0.0)
green:MAX(g - 0.2, 0.0)
blue:MAX(b - 0.2, 0.0)
alpha:a];
return nil;
}
Für hellere Farben
+ (UIColor *)lighterColorForColor:(UIColor *)c
{
CGFloat r, g, b, a;
if ([c getRed:&r green:&g blue:&b alpha:&a])
return [UIColor colorWithRed:MIN(r + 0.2, 1.0)
green:MIN(g + 0.2, 1.0)
blue:MIN(b + 0.2, 1.0)
alpha:a];
return nil;
}
Siehe visuelle Unterschiede unten, unter Berücksichtigung der angegebenen Farbe ist [UIColor orangeColor]