【问题标题】:UICollectionViewCell animation stops when segued to a new UIViewController and backUICollectionViewCell 动画在切换到新的 UIViewController 并返回时停止
【发布时间】: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


    【解决方案1】:

    您的viewWillAppear(animated) 中的collectionView.reloadData() 怎么样?我猜这不会有帮助,除非你在你的cellForItemAt 中调用你的beginAnimation()

    所以你在awakeFromNib() 中调用beginAnimation()

    发件人:https://stackoverflow.com/a/9122393/3231194

    awakeFromNib 在视图及其子视图被调用后被调用 分配和初始化。保证视图将具有 它的所有出口实例变量集。

    我建议你在cellForItemAt 期间调用你的EmptyDishesCollectionViewCellbeginAnimation() 函数。如有必要,只需重新加载您的collectionView。希望对您有所帮助!

    【讨论】:

    • viewWillAppear(animated) 中调用collectionView.reloadData() 触发collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) 并在cellForItemAt 中添加cell.beginAnimation() 修复它。重新加载整个集合似乎有点笨拙,但它确实有效。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2012-11-28
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多