我有一个由[UIColor colorWithPatternImage:...];
创建的UIColor,我想将它存储在NSArray中。
我有一个问题,因为我有普通颜色的以下代码
NSString *NSStringFromUIColor(UIColor *color) {
//Creates a string with RGB values of the color
const CGFloat *components = CGColorGetComponents(color.CGColor);
return [NSString stringWithFormat:@"[%f, %f, %f, %f]",
components[0],
components[1],
components[2],
components[3]];
}
但是上面的碰撞与我非常规的模式ColorFromImage有关。 那么再一次,我如何将这种颜色存储在NSArray等中?
由于
答案 0 :(得分:4)
NSArray使用Objective-C对象,我在那里看到的“(float)
”演员绝对不是。
更具体地说,“float
”,“int
”,“char
”是C data types,CGFloat是核心图形数据结构(也不是Objective C object)。
如果要在数组中保存颜色,则需要为“UIColor
”Objective-C对象。
如果您想将CGFloats保存在NSArray中,you can do the answer in this related question。
答案 1 :(得分:0)
如果要在数组中保存参数化颜色,请将值包装在NSNumbers中(但是,UIColor似乎是更好的选择)。换句话说,要么
CGFloat red = 0.5;
NSArray *colorParams = @[ [NSNumber numberWithFloat:red], // etc
或者,更好:
NSArray *color = [UIColor colorWithRed:red // etc
这些对象中的任何一个都可以放在另一个数组中:
NSArray *myArrayOfColors = @[ colorParams, color, // but watch out, we have two distinct
// representations of colors in this array
答案 2 :(得分:0)
您无法将C类型存储到NSArray中。你可以这样做:
[NSArray arrayWithObjects: [NSNumber numberWithDouble: components[0]], [NSNumber numberWithDouble: components[1]], nil];
如果实际上只有两个组件。这是一个更通用的版本:
CGColorRef cgColor = [myColor CGColor];
NSUInteger numComponents = CGColorGetNumberOfComponents(cgColor);
CGFloat const *components = CGColorGetComponents(cgColor);
NSNumber *componentObjects[numComponents];
for (NSUInteger i = 0; i < numComponents; i++)
componentObjects[i] = [NSNumber numberWithDouble: components[i]];
NSArray *colorArray = [NSArray arrayWithObjects: componentObjects count: numComponents];
答案 3 :(得分:0)
NSString* NSStringFromColor(UIColor* color) {
CGFloat r, g, b, a;
[color getRed:&r green:&g blue:&b alpha:&a];
return [NSString stringWithFormat:@"[%f, %f, %f, %f"], r, g, b, a];
}
答案 4 :(得分:-1)
在表达式[UIColor redColor]
中,很明显redColor
是selector
。
此外,我们可以将选择器转换为NSString
s,反之亦然:
NSString colorSel = NSStringFromSelector(@selector(redColor));
SEL redSel = NSSelectorFromString(colorSel");
我现在正在使用Windows PC,因此无法确定它是否应该包含在@selector()
中。但你可以尝试两种方式来看看哪种方法是正确的。
您可以从字符串中获取选择器,您可以使用以下颜色设置颜色:
if ([UIColor respondsToSelector:redSel])
yourElement.backgroundColor = [UIColor performSelector:redSel];
这是基本UIColor
的基本示例。您也可以使用UIColorFromRGB
宏或CGColor
。
获得带有颜色的NSString
后,您可以轻松地将它们存储在数组中。