IOS/Objective-C: 将标准 UIColor 转换为 CGColor

IOS/Objective-C: Convert standard UIColor to CGColor

我在另一个 class 的 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];//does not work

circleColor = myColor.CGColor;

编辑

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

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

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

首先初始化那个对象,然后用你的 user defaults 赋值给那个对象,然后相应地进行。

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

尝试归档对象以获取数据并像这样保存数据:

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];