私はUICollectionViewCell
にグラデーションサブビューを持っています。 私のビューコントローラには、CoreDataをソートするボタンがあり、はUICollectionView
にあります。 グラデーションのサブビューが何度も何度も描画されるのを避けるため、prepareForReuse()
にremoveFromSuperview()
を実装します。 そこには、グラディエントの存在を追跡するフラグも実装されているので、セルがロードされているときでも新しいグラデーションが追加されます。 ただし、グラデーションを削除した後、私の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