#ios #swift #uitableview #overlay #calayer
#iOS #swift #uitableview #наложение #calayer
Вопрос:
У меня есть пользовательский, UITableViewCell
который содержит изображение, я добавил расширение к UIImageView
, которое добавляет к нему слой для наложения более светлого цвета.
func overlay(widht: CGFloat, height: CGFloat, color: UIColor) {
let colorOverlay = CALayer()
colorOverlay.frame = CGRect(x: 0, y: 0, width: widht, height: height)
colorOverlay.backgroundColor = color.cgColor
self.layer.addSublayer(colorOverlay)
self.layer.masksToBounds = true
}
Проблема здесь в том, что каждый раз, когда ячейка используется повторно, слой добавляется, и, таким образом, они складываются до тех пор, пока изображение больше не будет видно, и все, что видно, это серый прямоугольник
self.image.overlay(widht: self.image.frame.width, height: self.image.frame.height, color: UIColor.gray)
Как я мог бы предотвратить укладку слоя? Или как я мог бы добавить наложенный цвет к изображению без использования CALayer()
, который работает с повторно используемыми ячейками
Ответ №1:
Проблема должна заключаться в том, что вы добавляете наложение в свой вид изображения каждый раз, когда настраиваете свою ячейку. Имейте в виду, что UITableView повторно использует один и тот же экземпляр ячейки, если это применимо. Что делать, чтобы управлять вашим визуальным выводом, полностью открыто. Но убедитесь, что если ваш код выполняется дважды, это не приведет к какой-либо разнице или ограничит выполнение этого фрагмента кода только один раз, на чем вам следует сосредоточиться здесь.
Комментарии:
1. Каким был бы способ добавить слой CALayer к изображению внутри повторно используемой ячейки, который не будет применяться каждый раз, когда ячейка используется повторно? Я думал об использовании флага, но где я мог бы его использовать? Внутри
cellForRowAt
?