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

问题描述 投票:0回答:3

我在另一个类的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

ios objective-c cgcolor
3个回答
2
投票

您无法直接在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];

2
投票

更换

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

circleColor = myColor.CGColor;

编辑

如果你没有在UIColor中保存你的NSUSerDefaults,请查看this answer,了解如何正确存储和检索它。


1
投票

我想你还没有在这一行创建myColor对象。

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

首先初始化该对象,然后使用user defaults在该对象上分配,然后相应地继续。

© www.soinside.com 2019 - 2024. All rights reserved.