У меня есть UICollectionViewCell
с подглядыванием градиента. На мой взгляд, контроллер, у меня есть кнопки, сортирующие CoreData, а затем reloadData()
на UICollectionView
. Чтобы избежать повторного рисования подграфа градиента (как это было в прошлом), я реализую removeFromSuperview()
в prepareForReuse()
. Там я также реализую флаг, который отслеживает существование градиента, поэтому я все же добавляю новый градиент, когда ячейка загружается. Однако после удаления градиента мой willMove(toSuperview:)
не работает, а вид градиента не отображается. Что случилось с моей логикой?Удаление подзапроса, а затем его добавление
class CollectionCell: UICollectionViewCell {
@IBOutlet weak var mealImg: UIImageView!
@IBOutlet weak var mealTitleLbl: UILabel!
@IBOutlet weak var gradientView: UIView!
var gradientWasRemoved = false
func configureCell(meal: Meal) {
mealTitleLbl.text = meal.title
let img = meal.getMealImage()
mealImg.image = img
addGradient()
}
func addGradient() {
let gradient = CAGradientLayer()
gradient.frame = gradientView.bounds
let topColor = UIColor(red:0.07, green:0.07, blue:0.07, alpha:1)
let botomColor = UIColor.clear
gradient.colors = [topColor.cgColor, botomColor.cgColor]
gradientView.layer.insertSublayer(gradient, at: 0)
if gradientWasRemoved == true {
gradientView.willMove(toSuperview: self)
}
}
override func prepareForReuse() {
super.prepareForReuse()
gradientView.removeFromSuperview()
gradientWasRemoved = true
}
}
http://stackoverflow.com/questions/24380535/how-to-apply-gradient-to-background-view-of-ios-swift-app/37243106#37243106 –
На мой взгляд, ваш 'gradientView' является 'weak', и он будет равен нулю после того, как вы назовете' gradientView.removeFromSuperview() '. – nynohu
Вы говорите, что вид градиента не добавлен обратно? Возможно, вам нужно обязательно вызвать addSubview в ячейке, так как я не вижу, как вы добавляете это обратно. – Luis