【问题标题】:Retrieve Color from Plist. iOS从 Plist 中检索颜色。 iOS
【发布时间】:2015-04-24 19:53:24
【问题描述】:

我正在尝试从字典中的 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 实例不能直接存储到属性列表中。只有NSNumberNSStringNSDataNSDate 和(可能是嵌套的)字典/数组的实例。

标签: ios xcode dictionary plist uicolor


【解决方案1】:

我将它们存储为十六进制值,然后使用以下内容进行检索:

+ (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];
}

或者简单地保存用逗号分隔的浮点值并解析出来。有几个解决方案...

【讨论】:

    【解决方案2】:

    这是 Swift 3 / iOS 10 版本的 CW0007007 的答案:

    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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-12
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多