Ich habe eine UICollectionViewCell
mit einer Gradientenunteransicht. In meiner Ansicht Controller, habe ich Tasten, die CoreData und dann reloadData()
auf der UICollectionView
sortieren. Um zu vermeiden, dass meine Unteransicht immer wieder neu gezeichnet wird (wie es in der Vergangenheit der Fall war), implementiere ich removeFromSuperview()
in prepareForReuse()
. Dort implementiere ich auch ein Flag, das den Gradientenverlauf verfolgt, so dass ich immer noch einen neuen Gradienten hinzufüge, wenn die Zelle geladen wird. Aber nach dem Entfernen des Farbverlaufs funktioniert meine willMove(toSuperview:)
nicht, und die Verlaufsansicht wird nicht angezeigt. Was ist los mit meiner Logik?Eine Unteransicht entfernen und dann wieder hinzufügen
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 –
Meiner Meinung nach ist Ihr 'gradientView' 'weak' und es wird null sein, nachdem Sie' gradientView.removeFromSuperview() 'aufgerufen haben. – nynohu
Sie sagen, dass die Farbverlaufsansicht nicht hinzugefügt wurde? Vielleicht müssen Sie sicher sein, dass addSubview auf der Zelle aufgerufen wird, da ich nicht sehen kann, dass Sie das wieder einfügen. – Luis