13 Stimmen

Hex Farbe von uicolor

Ich habe ein Problem beim Konvertieren von UIColor in Hex-Farbe, hier ist, was ich gefunden habe

CGColorRef colorref = [[Colorview_ backgroundColor] CGColor];

int numComponents = CGColorGetNumberOfComponents(colorref);

if (numComponents == 4) {
    const CGFloat *components = CGColorGetComponents(colorref);

    int hexValue = 0xFF0000*components[0] + 0xFF00*components[1] + 0xFF*components[2];

    NSString *hexString = [NSString stringWithFormat:@"#%d", hexValue];
}

Dieser Code gibt mir z.B. #5576149 für hexString, wie Sie sehen, gibt es 7 Ziffern und nicht 6, es ist keine Hex-Farbe. Jede Hilfe wird geschätzt, danke.

13voto

ngb Punkte 722

Die Antwort des Sylphos oben funktioniert nicht für darkGrayColor.

Dies funktioniert besser (entnommen von http://softteco.blogspot.jp/2011/06/extract-hex-rgb-color-from-uicolor.html):

- (NSString *) hexFromUIColor:(UIColor *)color {
    if (CGColorGetNumberOfComponents(color.CGColor) < 4) {
        const CGFloat *components = CGColorGetComponents(color.CGColor);
        color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]];
    }
    if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {
        return [NSString stringWithFormat:@"#FFFFFF"];
    }
    return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(color.CGColor))[0]*255.0), (int)((CGColorGetComponents(color.CGColor))[1]*255.0), (int)((CGColorGetComponents(color.CGColor))[2]*255.0)];
}

2voto

Sully Punkte 14188
NSString *hexString = [NSString stringWithFormat:@"#%d", hexValue];

Sie formatieren es als eine Zahl mit %d

Sie möchten es als Hexadezimalzahl mit %x oder %X formatieren -- vielleicht als Zeichenkette %s. Ich habe nicht überprüft, was die Funktion tut und was int hexValue enthält.

d or i Signierte Dezimalzahl 392

x Unsigned hexadecimal integer 7fa

X Unsigned hexadecimal integer (Großbuchstaben) 7FA

2voto

Sylphos Punkte 146

Ich habe das gestern ausprobiert, weil ich eine Hex-Farbe aus einer UIColor bekommen musste und es auch in JavaScript funktioniert hat, aber das funktioniert nicht, wenn eine Komponente 0 ist, weil es eine 0 anstelle von einer 00 erhält. Also wäre reines Cyan RGB 0 255 255, und dieser Code würde #0ffff anstelle von #00ffff zurückgeben.

Ich habe diesen Code von deinem übernommen und er funktioniert in meiner App:

-(NSString*)colorToHex:(UIColor*)color{

    CGColorRef colorref = [color CGColor];

    const CGFloat *components = CGColorGetComponents(colorref);

    NSString *hexString = @"#";
    int hexValue = 0;

    for (int i=0; i<3; i++) {
        if (components[i] == 0) {
            hexString = [NSString stringWithFormat:@"%@00", hexString];
        }else{
            hexValue = 0xFF*components[i];
            hexString = [NSString stringWithFormat:@"%@%x", hexString, hexValue];
        }
    }

    return hexString;
}

1voto

Nate Flink Punkte 3834

Hier ist eine Version davon, aber formatiert als eine C-Funktion:

static inline NSString *hexFromUIColor(UIColor * _color) {
    if (CGColorGetNumberOfComponents(_color.CGColor) < 4) {
        const CGFloat *components = CGColorGetComponents(_color.CGColor);
        _color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]];
    }
    if (CGColorSpaceGetModel(CGColorGetColorSpace(_color.CGColor)) != kCGColorSpaceModelRGB) {
        return [NSString stringWithFormat:@"#FFFFFF"];
    }
    return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(_color.CGColor))[0]*255.0), (int)((CGColorGetComponents(_color.CGColor))[1]*255.0), (int)((CGColorGetComponents(_color.CGColor))[2]*255.0)];
}

0voto

oliverpope Punkte 1

Erweiterung UIColor { Bequemlichkeit init(hexString: String, alpha: CGFloat = 1.0) { Lassen hexString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) Let scanner = Scanner(string: hexString)

 if (hexString.hasPrefix("#")) {
        scanner.scanLocation = 1
    }

    var color: UInt32 = 0
    scanner.scanHexInt32(&color)

    lassen Maske = 0x000000FF
    lassen r = Int(color >> 16) & mask
    lassen g = Int(color >> 8) & mask
    lassen b = Int(color) & maske

    lassen rot   = CGFloat(r) / 255.0
    lassen grün = CGFloat(g) / 255.0
    lassen blau  = CGFloat(b) / 255.0

    selbst.init(rot:rot, grün:grün, blau:blau, alpha:alpha)
}

Funktion zu HexString() -> String {
    var r:CGFloat = 0
    var g:CGFloat = 0
    var b:CGFloat = 0
    var a:CGFloat = 0

    getRed(&r, green: &g, blau: &b, alpha: &a)

    lassen rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0

    zurückgeben String(format:"#%06x", rgb)
}

}

Sie können es einfach verwenden, um Ihre RGB-Farben wie folgt zu erstellen

lassen Farbe = UIColor(hexString: "#3f3f3f")

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X