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)