2010-12-15 13 views
8

Zum Speichern der UIColor in einem Plist: Ich habe verschiedene Möglichkeiten versucht, aber nicht in der Lage, ich möchte die Farbwerte in einer PLIST-Datei speichern und abrufen.So laden Sie eine UIColor von einem Plist

Ich kann den Datenwert der Farbe nicht mit nslog extrahieren und im plist speichern.

Gibt es einen anderen Weg?

Antwort

7

Ich bevorzuge die Verwendung von String, um die Farbe zu speichern. Der Parsing-Code, der dies unten nicht gezeigt (ausgeschnitten aus https://github.com/xslim/TKThemeManager/blob/master/TKThemeManager.m#L162)

+ (UIColor *)colorFromString:(NSString *)hexString {  
    NSScanner *scanner = [NSScanner scannerWithString:hexString]; 
    unsigned hex; 
    BOOL success = [scanner scanHexInt:&hex]; 

    if (!success) return nil; 
    if ([hexString length] <= 6) { 
     return UIColorFromRGB(hex); 
    } else { 
     unsigned color = (hex & 0xFFFFFF00) >> 8; 
     CGFloat alpha = 1.0 * (hex & 0xFF)/255.0; 
     return UIColorFromRGBA(color, alpha); 
    } 
} 
1

habe ich eine Kategorie für diese:

@implementation UIColor (EPPZRepresenter) 


NSString *NSStringFromUIColor(UIColor *color) 
{ 
    const CGFloat *components = CGColorGetComponents(color.CGColor); 
    return [NSString stringWithFormat:@"[%f, %f, %f, %f]", 
      components[0], 
      components[1], 
      components[2], 
      components[3]]; 
} 

UIColor *UIColorFromNSString(NSString *string) 
{ 
    NSString *componentsString = [[string stringByReplacingOccurrencesOfString:@"[" withString:@""] stringByReplacingOccurrencesOfString:@"]" withString:@""]; 
    NSArray *components = [componentsString componentsSeparatedByString:@", "]; 
    return [UIColor colorWithRed:[(NSString*)components[0] floatValue] 
          green:[(NSString*)components[1] floatValue] 
          blue:[(NSString*)components[2] floatValue] 
          alpha:[(NSString*)components[3] floatValue]]; 
} 


@end 

Die gleiche Formatierung, die durch NSStringFromCGAffineTransform verwendet wird. Dies ist tatsächlich ein Teil eines größeren Plist-Objektdarstellers in [eppz! Kit bei GitHub] [1].

+0

Just zu beachten, dass die roten, grünen, blauen Werte sind 0,0-1,0 nicht 0-255 so sie durch 255 teilen richtigen Wert zu erhalten - dies hat mich für eine Weile erwischt. – amergin

+0

Dies ist zum Speichern in 'plist' gedacht, Sie möchten wahrscheinlich die Farben in' plist' "entwerfen". Weitere Informationen zu RGB-Konvertierungshilfen finden Sie unter http://stackoverflow.com/questions/13224206/how-do-i-create-an-rgb-color-with-uicolor/21297254#21297254 und http://stackoverflow.com/questions/ 437113/how-to-get-rgb-Werte-von-uicolor/21296829 # 21296829. – Geri

3

Für eine schnelle Lösung (aber vielleicht nicht die hübsche):

  • Fügen Sie die Farbe Eigenschaft als Typ Nummer in die plist
  • Geben Sie die Farbe als RGB-hexdecimal, zum Beispiel: 0xff00e3
  • Lesen sie es aus und bearbeiten es mit einem Makro wie unten

Hier ist ein Codebeispiel:

// Add this code to some include, for reuse 
#define UIColorFromRGBA(rgbValue, alphaValue) ([UIColor colorWithRed:((CGFloat)((rgbValue & 0xFF0000) >> 16))/255.0 \ 
                   green:((CGFloat)((rgbValue & 0xFF00) >> 8))/255.0 \ 
                   blue:((CGFloat)(rgbValue & 0xFF))/255.0 \ 
                   alpha:alphaValue]) 

// This goes into your controller/view 
NSDictionary *myPropertiesDict = [NSDictionary dictionaryWithContentsOfFile:...]; 
UIColor *titleColor = UIColorFromRGBA([myPropertiesDict[@"titleColor"] integerValue], 1.0); 

Nachdem die Farbe als hexdecimal Eingabe, wird der plist Editor es als Dezimalzahl zeigen. Nicht nett. Als Entwickler kopieren Sie normalerweise die Farben aus einem Designdokument, so dass die Farbwerte nicht so groß gelesen werden müssen.