0

根据我在此博客上找到的代码,我正在尝试backgroundView使用渐变自定义分组的 UITableViewCell。它是用于 cell.backgroundView 的 UIView 的子类。

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

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

然后,drawRect在子类 backgroundView 上像这样使用:

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,拼命添加 random const,但我很快就没有想法了。

我根本不明白,为什么我不能以这种方式填充我的浮点数组?我究竟做错了什么?

4

1 回答 1

1

评论添加为答案:

以这种方式创建数组的唯一方法是在代码中动态地创建。如果要添加到 iVar(类变量),则需要一一进行,因为在初始化时已经分配了内存。所以使用startAndEndColors[0] = ...等。

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

一种解决方法是在你的标题中是这样的

CGFloat *startAndEndColors;

然后在你的实现中像这样

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

这样你就可以按照你想要的方式初始化它,但是你不能保证你的对象中有多少个startAndEndColors对象。如果您尝试在其范围之外访问,您以后可能会将其分配给错误大小的东西并导致崩溃。

于 2013-07-11T14:10:52.697 回答