Gradient Layer over ImageView重用

在我的'cellForRowAtIndexPath'我有以下代码来填充图像(asynchronous)并应用自定义渐变

这工作得很好,直到我为每个单元格添加一个自定义颜色。 它现在做的是回收以前的颜色,而不是应用一个新的 – 这大概是由于下面的行将跳过梯度代码一旦应用到每个单元格:

if(!cell.gradientMask){ 

但是,如果我对此进行注释,则颜色可以正常工作,但每个单元格上的渐变将叠加起来,因为每次都会添加一个新图层(请参阅现有问题 )

我认为我需要删除每个迭代gradientLayer,是最好的办法或者我可能需要inheritanceUIImageView?

 if (!cell.gradientMask) { gradientMask = [CAGradientLayer layer]; gradientMask.frame = cell.eventImage.layer.bounds; gradientMask.startPoint = CGPointMake(0.5, 0.2); gradientMask.endPoint = CGPointMake(0.5, 1.0); /* THIS COLOUR CHANGES FOR EACH CELL */ gradientMask.colors = [NSArray arrayWithObjects: (id)[[UIColor colorWithRed:0.0f green:0.0f blue:1.0f alpha:0.0f] CGColor], (id)[[UIColor colorWithRed:0.0f green:0.0f blue:1.0f alpha:1.0f] CGColor],nil]; [cell.eventImage.layer insertSublayer:gradientMask atIndex:0]; cell.gradientMask = gradientMask; } 

您需要在创buildgradientMask的块之外设置颜色:

 if (!cell.gradientMask) { //Operations that need to be carried out only ONCE are put inside this block gradientMask = [CAGradientLayer layer]; gradientMask.frame = cell.eventImage.layer.bounds; gradientMask.startPoint = CGPointMake(0.5, 0.2); gradientMask.endPoint = CGPointMake(0.5, 1.0); [cell.eventImage.layer insertSublayer:gradientMask atIndex:0]; cell.gradientMask = gradientMask; } //Operations that need to be carried out again and again are outside the block if (condition1) { cell.gradientMask.colors = [NSArray arrayWithObjects: (id)[[UIColor colorWithRed:0.0f green:0.0f blue:1.0f alpha:0.0f] CGColor], (id)[[UIColor colorWithRed:0.0f green:0.0f blue:1.0f alpha:1.0f] CGColor],nil]; } else { cell.gradientMask.colors = [NSArray arrayWithObjects: (id)[[UIColor colorWithRed:0.0f green:1.0f blue:0.0f alpha:0.0f] CGColor], (id)[[UIColor colorWithRed:0.0f green:1.0f blue:0.0f alpha:1.0f] CGColor],nil]; }