繁体   English   中英

如何从Plist加载UIColor

[英]How to load a UIColor from a Plist

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

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

有没有其他方法可以这样做?

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

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

  • 将颜色属性作为类型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编辑器会将其显示为十进制数字。 不太好。 作为开发人员,您通常会复制粘贴设计文档中的颜色,因此需要读取颜色值并不是那么大。

我为此做了一个类别:

@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]中更大规模的plist对象代表的一部分[1]。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM