У меня странный сбой, вызванный UIPropertyAnimtor
.У меня UICollectionView
с пользовательским макетом (для растянутого заголовка), и я использую UIPropertyAnimator
для анимации размытия, когда UICollectionView
опущен вниз.
Проблема в том, что когда я закрываю сцену (иногда после повторного нажатия), приложение вылетает со следующим сообщением:
objc[11346]: Cannot form weak reference to instance (0x121eeda60) of class [APPLICATION_NAME].StrechyHeaderCollectionReusableView. It is possible that this object was over-released, or is in the process of deallocation.
Когда я возвращаюсь назад, инкод на то, что вызвало сбой, это вызов в deinit
.Во всяком случае, как я понимаю UIPropertyAnimator
все сделано правильно.Без! Animator.stopAnimation (true) the app would crash due to unreleased
UIProperyAnimator`.
Это код в моем представлении заголовка:
final class StrechyHeaderCollectionReusableView: UICollectionReusableView, Nibable {
// some code...
lazy var animator: UIViewPropertyAnimator = {
UIViewPropertyAnimator(duration: 3.0, curve: .easeOut, animations: { [weak self] in
self?.blurVisualEffectView.effect = UIBlurEffect(style: .dark)
})
}()
override func awakeFromNib() {
super.awakeFromNib()
blurVisualEffectView.effect = nil
}
// some code...
deinit {
animator.stopAnimation(true)
}
}
Я изменяю долю анимации из класса источника данных + делегата, и представление визуальных эффектов находится внутри пользовательского заголовка xib.
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// some code...
let strechyHeader = headerView(in: collectionView)
strechyHeader?.isBackButtonHidden = isBackButtonHidden
if scrollView.contentOffset.y > 0 {
strechyHeader?.animator.fractionComplete = 0
} else {
strechyHeader?.animator.fractionComplete = abs(scrollView.contentOffset.y) / 100
}
}
Есть идеи?Спасибо, ребята!