Предотвращение перекрытия слоя CAGradientLayer внутри UIImageView в UITableViewCell

#ios #objective-c #uitableview #gradient #cagradientlayer

#iOS #objective-c #uitableview #градиент #cagradientlayer

Вопрос:

Я применяю градиент в своем пользовательском, UITableViewCell используя Storyboards внутри моего cellForRowAtIndexPath метода, и я хотел, чтобы мое применение CAGradientLayer градиента не перекрывалось. Как я могу это сделать?

Это мой текущий код, который я использую, чтобы предотвратить его перекрытие, но градиент применяется только к последнему, indexPath загруженному в UITableView

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    VideoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"VideoCell" forIndexPath:indexPath];

    if (!gradientLayer) {
        gradientLayer = [CAGradientLayer layer];
    }
    gradientLayer.frame = cell.backgroundImage.bounds;
    gradientLayer.colors =  @[(id)[UIColor blackColor].CGColor, (id)[UIColor clearColor].CGColor];
    [cell.backgroundImage.layer insertSublayer:gradientLayer atIndex:0];

    return cell;
}
  

Мой cell.backgroundImage — это просто UIImageView , где я загружаю изображение и применяю к нему градиент.

Ответ №1:

Я нашел ответ, который работает. Я просто установил для своих подслоев BackgroundImage значение nil перед применением градиента.

 cell.backgroundImage.layer.sublayers = nil;