我正在尝试使用渐变自定义分组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
,但我很快就没有了想法。
我根本就没有得到它,为什么我不能这样填充我的浮点数组?我做错了什么?
答案 0 :(得分:1)
评论添加为答案:
以这种方式创建数组的唯一方法是在代码中动态生成。如果要添加到iVar(类变量),则需要逐个查看,因为内存已在初始化时分配。因此,请使用startAndEndColors[0] = ...
等
至于你的后续问题:不,没有办法以这种方式将值分配给已在分配阶段初始化的内存。如果您使用了std :: vector或其他对象,则可能。
在你的标题
中可以解决这个问题CGFloat *startAndEndColors;
然后在你的实现中使用类似的东西
float colorsTest[8] = {red, green, blue, alpha, red1, green1, blue1, alpha1};
startAndEndColors = colorsTest;
这样你可以按照你想要的方式初始化它,但是你无法保证startAndEndColors
对象中的对象数量。您可以稍后将其分配给错误的大小,如果您尝试访问它的边界,则会导致崩溃。