【发布时间】:2017-10-12 17:06:16
【问题描述】:
我在UICollectionView 中有一个自定义UICollectionViewCell,它在最初显示集合视图时会正确设置动画。但是,当我切换到新的 UIViewController 并返回到原来的 UIViewController 时,动画停止了。
class EmptyDishesCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var plateImage: UIImageView!
@IBOutlet weak var knifeImage: UIImageView!
@IBOutlet weak var forkImage: UIImageView!
@IBOutlet weak var emptyBackgroundView: UIView!
@IBOutlet weak var plateHeight: NSLayoutConstraint!
@IBOutlet weak var plateWidth: NSLayoutConstraint!
override func awakeFromNib() {
super.awakeFromNib()
setupBorders()
setupImages()
beginAnimation()
setShadow()
}
func setupBorders() {
self.emptyBackgroundView.layer.cornerRadius = 3.0
self.emptyBackgroundView.backgroundColor = UIColor.white
}
func setupImages() {
self.plateImage.tintColor = UIColor.projectBackgroundSuperLightGray
self.forkImage.tintColor = UIColor.projectBackgroundSuperLightGray
self.knifeImage.tintColor = UIColor.projectBackgroundSuperLightGray
}
func beginAnimation() {
UIView.animateKeyframes(withDuration: 2.4, delay: 0.0, options: [.calculationModeLinear, .repeat, .autoreverse], animations: {
UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 2/5, animations: {
let moveLeft = CGAffineTransform(translationX: -5.0, y: 0.0)
let moveRight = CGAffineTransform(translationX: 5.0, y: 0.0)
let rotate = CGAffineTransform(rotationAngle: .pi / 5.0)
self.forkImage.transform = moveLeft
self.knifeImage.transform = moveRight
self.plateImage.transform = rotate
})
UIView.addKeyframe(withRelativeStartTime: 1/3, relativeDuration: 1/5, animations: {
// let wait = CGAffineTransform(translationX: -5.0, y: 0.0)
// self.forkImage.transform = wait
})
UIView.addKeyframe(withRelativeStartTime: 2/3, relativeDuration: 2/5, animations: {
self.forkImage.transform = .identity
self.knifeImage.transform = .identity
self.plateImage.transform = .identity
})
})
}
}
我假设当视图移出视线时,动画会自动停止,但是当它重新进入视图时,它需要手动再次启动。
我很自然地认为将动画块放入didMoveToWindow 会修复它,但这是不行的。
任何帮助将不胜感激
【问题讨论】:
标签: ios swift uikit uicollectionviewcell