将UIColor存储在数组中

时间:2014-01-06 15:40:32

标签: ios objective-c uikit uicolor

我有一个由[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等中?

由于

5 个答案:

答案 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]中,很明显redColorselector。 此外,我们可以将选择器转换为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后,您可以轻松地将它们存储在数组中。