2012-04-02 1 views
0

вопрос в названии, Как установить UIColel UIColor из Plist?Как установить UIColel UIColor из Plist

я попытался это:

UIColor *colorLabel; 

я добавить строку NSString в моем Plist и написал redColor как ценность, но не работает ...

Как я справиться с этим?

Спасибо, ребята.

ответ

0

Я бы лично хранить значения RGBA вместо строки, а затем вы можете просто использовать

+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha 

Не делайте ниже

Подобно тому, как интересную сторону обратите внимание, что самым негибким способом было бы использовать методы UIColor, подобные этому

[UIColor performSelector:NSSelectorFromString(@"redColor")] 
0

Я думаю, вам нужно преобразовать из строки в UIColor. Вы помещаете цвета в свой plist шестнадцатеричными цветами (для красного - ff0000), а затем используйте что-то вроде следующей функции для получения UIColor.

+ (UIColor *) colorWithHexString: (NSString *) stringToConvert 
{ 
    NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 
    // String should be 6 or 8 characters 
    if ([cString length] < 6) return [UIColor blackColor]; 
    // strip 0X if it appears 
    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2]; 
    if ([cString length] != 6) return [UIColor blackColor]; 
    // Separate into r, g, b substrings 
    NSRange range; 
    range.location = 0; 
    range.length = 2; 
    NSString *rString = [cString substringWithRange:range]; 
    range.location = 2; 
    NSString *gString = [cString substringWithRange:range]; 
    range.location = 4; 
    NSString *bString = [cString substringWithRange:range]; 
    // Scan values 
    unsigned int r, g, b; 
    [[NSScanner scannerWithString:rString] scanHexInt:&r]; 
    [[NSScanner scannerWithString:gString] scanHexInt:&g]; 
    [[NSScanner scannerWithString:bString] scanHexInt:&b]; 
     
    return [UIColor colorWithRed:((float) r/255.0f) 
                       green:((float) g/255.0f) 
                            blue:((float) b/255.0f) 
                       alpha:1.0f]; 
} 
+0

Или вы могли бы просто сохранить значения RGBA и не должны возиться с конверсией ... –

0

Чтобы сохранить человеческие читаемости, я сделал категорию для этого:

@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 

В то же форматирование, которое используется NSStringFromCGAffineTransform. На самом деле это часть репрезентатора объекта plist большего масштаба в eppz!kit at GitHub.

Смежные вопросы