iOS превращается в черный цвет в верхней части UIImageView

У меня есть UITableView где моя клетка backgroundView это UIImageView, Я бы хотел, чтобы верхняя часть каждого изображения стала чёрной, чтобы я мог наложить некоторый белый текст.

Я посмотрел на некоторые ответы, как это, но ни один, кажется, не работает.

В tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) Я пытался:

var imageView = UIImageView(image: image)

var gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = imageView.frame
gradient.colors = [UIColor.blackColor(), UIColor.clearColor()]
gradient.locations = [0.0, 0.1]
imageView.layer.insertSublayer(gradient, atIndex: 0)

cell!.backgroundView = imageView

Но я не вижу никакого градиента и никакой разницы от того, когда я удаляю код градиента. Мой градиент сидит под изображением?

Если я заменю линию imageView.layer.insertSublayer(gradient, atIndex: 0) с imageView.layer.mask = gradient тогда мои клетки просто пустые и белые (изображения больше нет).

3 ответа

Решение

В вашем gradient.colors вам нужно иметь массив CGColor, так:

gradient.colors = [UIColor.blackColor().CGColor, UIColor.clearColor().CGColor]

Я забыл, как упорядочен массив слоев. Однако вам просто нужно добавить слой градиента поверх слоя представления вашего изображения, используя addSubLayer, а не insertSublayer:atIndex: вы хотите, чтобы слой градиента поверх другого слоя был таким, чтобы его непрозрачные части покрывали представление изображения.

Для Swift 3.0 требуются некоторые небольшие изменения:

    let gradient: CAGradientLayer = CAGradientLayer()
    gradient.frame = imageView.frame
    gradient.colors = [UIColor.black.cgColor, UIColor.clear.cgColor]
    gradient.locations = [0.0, 0.1]
    imageView.layer.insertSublayer(gradient, at: 0)
Другие вопросы по тегам