将浮点数分配到全局数组中

时间:2013-07-11 13:42:13

标签: ios objective-c arrays uitableview cgfloat

我正在尝试使用渐变自定义分组UITableViewCell的backgroundView,基于我找到的代码on this blog.它是UIView的子类,用于cell.backgroundView。

背景渐变的颜色在原始代码中定义如下:

#define TABLE_CELL_BACKGROUND    { 1, 1, 1, 1, 0.866, 0.866, 0.866, 1}          // #FFFFFF and #DDDDDD

然后,在子类backgroundView的drawRect上使用这样的东西:

CGFloat components[8] = TABLE_CELL_BACKGROUND;
myGradient = CGGradientCreateWithColorComponents(myColorspace, components , locations, 2);

我正在尝试实现一个函数来设置渐变的开始和结束颜色,这需要两个UIColors,然后填入一个全局浮点数组float startAndEndColors[8](在.h / @interface中)供以后使用:

-(void)setColorsFrom:(UIColor*)start to:(UIColor*)end{

    float red = 0.0, green = 0.0, blue = 0.0, alpha =0.0, red1 = 0.0, green1 = 0.0, blue1 = 0.0, alpha1 =0.0;

    [start getRed:&red green:&green blue:&blue alpha:&alpha];
    [end getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1];

    //This line works fine, my array is successfully filled, just for test
    float colorsTest[8] = {red, green, blue, alpha, red1, green1, blue1, alpha1};

    //But for this one, I just have an error.
    //"Expected expression"
    //                 \
    //                  v
    startAndEndColors = {red, green, blue, alpha, red1, green1, blue1, alpha1};
}

但它在分配时将这个错误“预期表达”抛给了我。

我尝试使用CGFloat,拼命添加随机const,但我很快就没有了想法。

我根本就没有得到它,为什么我不能这样填充我的浮点数组?我做错了什么?

1 个答案:

答案 0 :(得分:1)

评论添加为答案:

以这种方式创建数组的唯一方法是在代码中动态生成。如果要添加到iVar(类变量),则需要逐个查看,因为内存已在初始化时分配。因此,请使用startAndEndColors[0] = ...

至于你的后续问题:不,没有办法以这种方式将值分配给已在分配阶段初始化的内存。如果您使用了std :: vector或其他对象,则可能。

在你的标题

中可以解决这个问题
CGFloat *startAndEndColors;

然后在你的实现中使用类似的东西

float colorsTest[8] = {red, green, blue, alpha, red1, green1, blue1, alpha1};
startAndEndColors = colorsTest;

这样你可以按照你想要的方式初始化它,但是你无法保证startAndEndColors对象中的对象数量。您可以稍后将其分配给错误的大小,如果您尝试访问它的边界,则会导致崩溃。