关于在Plist中保存UIColor: 我尝试了不同的方法,但没能这样做,我想保存并检索plist文件中的颜色值。
我无法使用nslog提取颜色的数据值并将其保存在plist中。
还有其他方法吗?
答案 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)
快速解决方案(但可能不是最漂亮的解决方案):
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文件并稍后检索它应该是一项非常简单的任务。