从 Plist 中检索颜色。 iOS
Retrieve Color from Plist. iOS
我正在尝试从字典中的 plist 中检索 UIColor,但在执行此操作时遇到了一些问题。
我在字典中的 plist 中添加了我的 UIColors,然后在字符串中。 (见附图)
我将它们像这样保存在我的 plist 中:
[UIColor colorWithRed:57/255.0 green:131/255.0 blue:50/255.0 alpha:1]
然后我有一个文件,我在其中保存了所有颜色,例如:
+ (instancetype)titleBarColor
{
return [UIColor colorWithRed:57/255.0 green:131/255.0 blue:50/255.0 alpha:1];
}
但我想做类似的事情:
+ (instancetype)titleBarColor
{
NSBundle* settings = [NSBundle mainBundle];
NSMutableDictionary *testing = [settings objectForInfoDictionaryKey: @"appColours"];
UIColor *test = [testing objectForKey:@"titleBarColor"];
NSLog(@"Test Colour %@", test);
return test;
}
但是由于颜色被字符串拾取,显然会发生崩溃。
我将它们存储为十六进制值,然后使用以下内容检索:
+ (UIColor *)colorFromHexString:(NSString *)hexString andAlpha:(CGFloat)alpha {
//If non valid string:
if (!hexString)
return nil;
unsigned rgbValue = 0;
NSScanner *scanner = [NSScanner scannerWithString:hexString];
[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&rgbValue];
return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:alpha];
}
或者简单地保存由逗号分隔的浮点值并解析出来。有几个解决方案...
这是 CW0007007 的答案的 Swift 3 / iOS 10 版本:
extension UIColor{
static func colorFrom(hexString:String, alpha:CGFloat = 1.0)->UIColor{
var rgbValue:UInt32 = 0
let scanner = Scanner(string: hexString)
scanner.scanLocation = 1 // bypass # character
scanner.scanHexInt32(&rgbValue)
let red = CGFloat((rgbValue & 0xFF0000) >> 16)/255.0
let green = CGFloat((rgbValue & 0x00FF00) >> 8)/255.0
let blue = CGFloat((rgbValue & 0x0000FF) >> 8)/255.0
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}
}
我正在尝试从字典中的 plist 中检索 UIColor,但在执行此操作时遇到了一些问题。
我在字典中的 plist 中添加了我的 UIColors,然后在字符串中。 (见附图)
我将它们像这样保存在我的 plist 中:
[UIColor colorWithRed:57/255.0 green:131/255.0 blue:50/255.0 alpha:1]
然后我有一个文件,我在其中保存了所有颜色,例如:
+ (instancetype)titleBarColor
{
return [UIColor colorWithRed:57/255.0 green:131/255.0 blue:50/255.0 alpha:1];
}
但我想做类似的事情:
+ (instancetype)titleBarColor
{
NSBundle* settings = [NSBundle mainBundle];
NSMutableDictionary *testing = [settings objectForInfoDictionaryKey: @"appColours"];
UIColor *test = [testing objectForKey:@"titleBarColor"];
NSLog(@"Test Colour %@", test);
return test;
}
但是由于颜色被字符串拾取,显然会发生崩溃。
我将它们存储为十六进制值,然后使用以下内容检索:
+ (UIColor *)colorFromHexString:(NSString *)hexString andAlpha:(CGFloat)alpha {
//If non valid string:
if (!hexString)
return nil;
unsigned rgbValue = 0;
NSScanner *scanner = [NSScanner scannerWithString:hexString];
[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&rgbValue];
return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:alpha];
}
或者简单地保存由逗号分隔的浮点值并解析出来。有几个解决方案...
这是 CW0007007 的答案的 Swift 3 / iOS 10 版本:
extension UIColor{
static func colorFrom(hexString:String, alpha:CGFloat = 1.0)->UIColor{
var rgbValue:UInt32 = 0
let scanner = Scanner(string: hexString)
scanner.scanLocation = 1 // bypass # character
scanner.scanHexInt32(&rgbValue)
let red = CGFloat((rgbValue & 0xFF0000) >> 16)/255.0
let green = CGFloat((rgbValue & 0x00FF00) >> 8)/255.0
let blue = CGFloat((rgbValue & 0x0000FF) >> 8)/255.0
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}
}