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.

Geben Sie hier die Bildbeschreibung ein

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")!)

Geben Sie hier die Bildbeschreibung ein

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]

Visuelle Demo



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow