【问题标题】:IOS/Objective-C: Convert standard UIColor to CGColorIOS/Objective-C:将标准 UIColor 转换为 CGColor
【发布时间】:2018-08-31 03:31:18
【问题描述】:

我在另一个类的 NSUserDefault 中设置了一种颜色,现在想将其转换为 CGColor 进行显示。我可以将实际的 UIColor 转换为 CGColor。但我无法将存储在变量中的 UIColor 转换为 CGColor

UIColor* myColor = [[NSUserDefaults standardUserDefaults] objectForKey:myColor];
struct CGColor* circleColor = nil;
circleColor=[[UIColor greenColor]CGColor];//this works 
circleColor=[[myColor] CGColor];//does not work
circleColor=[myColor CGColor];//does not work

任何人都可以提出正确的方法吗?

注意:由于需要桥接,我没有在 userdefaults 中保存 cgcolor

【问题讨论】:

  • 你试过circleColor=[myColor CGColor];吗? myColor 周围不应有方括号

标签: ios objective-c cgcolor


【解决方案1】:

您不能将 UIColor 对象直接保存在 NSUserDefaults 中。

尝试归档对象以获取数据并保存数据,如下所示:

UIColor *color = [UIColor redColor];
NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:color];
[[NSUserDefaults standardUserDefaults] setObject:colorData forKey:@"ColorKey"];

当您首先需要颜色时,您应该从 User Defaults 获取 NSData 对象,然后像这样创建 UIColor 对象

NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"ColorKey"];
UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];

【讨论】:

  • 出于好奇,我想没有办法像 @"greenColor" 那样在 NSuserdefault 中保存一个字符串并使用它来生成 [UIColor greenColor]?
  • 是的,您可以生成一个新对象。这取决于你在做什么。如果您想保存用户生成的颜色并在一段时间后加载它。比用户默认值更适合做这样的工作。
  • NSString 的正确语法是什么 colorstr = @"greencolor"; UIColor myColor =[UIColor colorstr];后者不起作用。(评论中不显示星号)
  • 当您输入 [UIColor greenColor] 时,这意味着您正在调用 UIColor 类方法“greenColor”。无法在此处键入之前声明的变量。像这样 [UIColor colorstr];你会得到编译错误。
  • 所以没有办法简单地从字符串生成标准颜色
【解决方案2】:

替换

circleColor = [[myColor] CGColor];//does not work

与

circleColor = myColor.CGColor;

编辑

如果您尚未将UIColor 保存在NSUSerDefaults 中,请查看this answer 以获取有关如何正确存储和检索它的示例。

【讨论】:

  • 你在语法上是对的。但是,我在保存 NSUser Defaults 时遇到了第二个错误。我对你投了赞成票,但将另一个标记为正确,因为这是更深层次的问题。
  • 这是 Objective-C,方括号语法对属性完全有效
【解决方案3】:

我认为您还没有在这一行中创建 myColor 对象。

UIColor* myColor = [[NSUserDefaults standardUserDefaults] objectForKey:myColor];
struct CGColor* circleColor = nil;

首先初始化该对象,然后使用您的user defaults 分配该对象,然后进行相应的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多