[英]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);
}
}
为了快速解决方案(但可能不是最漂亮的解决方案):
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.