如何从Plist加载UIColor

时间:2010-12-15 04:19:37

标签: ios ios4

关于在Plist中保存UIColor: 我尝试了不同的方法,但没能这样做,我想保存并检索plist文件中的颜色值。

我无法使用nslog提取颜色的数据值并将其保存在plist中。

还有其他方法吗?

4 个答案:

答案 0 :(得分:7)

我更喜欢使用字符串来存储颜色。执行此操作的解析代码如下所示(从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 :(得分:3)

快速解决方案(但可能不是最漂亮的解决方案):

  • 将颜色属性作为类型Number添加到plist
  • 将颜色输入为RGB十六进制,例如:0xff00e3
  • 阅读并使用下面的宏
  • 处理它

这是一个代码示例:

// 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);

输入十六进制颜色后,plist编辑器会将其显示为十进制数字。不太好。作为开发人员,您通常会复制粘贴设计文档中的颜色,因此需要读取颜色值并不是那么大。

答案 2 :(得分:1)

我为此做了一个类别:

@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使用的格式相同。这实际上是[GitHub] [eppz!kit] [1]中更大规模的plist对象代表的一部分。

答案 3 :(得分:0)

我发现此问题的最佳解决方案是在以下网站上:

http://arstechnica.com/apple/guides/2009/02/iphone-development-accessing-uicolor-components.ars

从UIColor获取字符串后,将它保存到plist文件并稍后检索它应该是一项非常简单的任务。