collection 视图更改后开始播放 Lottie

Start playling Lottie once collection view is changed

我在使用 lottie 动画时遇到问题,我的应用程序有一些启动方式,我想要实现的是每次 collectionview 中的视图发生变化时,开始我的动画,我有 4页和 4 个不同的 lottie 动画。目前如果我调用 animation.play() 函数,一旦应用程序启动,我所有的动画都会同时播放,所以一旦我到达最后一页,动画就结束了。我希望我的乐透只在显示视图时播放一次。

这是我的手机

class IntroductionCollectionViewCell: UICollectionViewCell {

@IBOutlet var title: UILabel!
@IBOutlet var subtitleDescription: UILabel!
@IBOutlet var animationView: AnimationView!

override func awakeFromNib() {
    super.awakeFromNib()
}
    
public func configure(with data: IntroInformations) {
    let animation = Animation.named(data.animationName)
    
    title.text = data.title
    subtitleDescription.text = data.description
    animationView.animation = animation
}

static func nib() -> UINib {
    return UINib(nibName: "IntroductionCollectionViewCell", bundle: nil)
  }
}

我的 collection 视图是这样设置的

extension IntroductionViewController {

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 0
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    pages.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "IntroductionCollectionViewCell", for: indexPath) as! IntroductionCollectionViewCell
    
    cell.configure(with: pages[indexPath.row])
    cell.animationView.loopMode = .loop
    cell.animationView.play()
    
    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: view.frame.width, height: view.frame.height)
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let scrollPos = scrollView.contentOffset.x / view.frame.width
    self.pageControl.currentPage = Int(floorf(Float(scrollPos)))
    
    let n = pageControl.numberOfPages
    
    if self.pageControl.currentPage == n - 1 {
        continueButton.isHidden = false
    } else {
        continueButton.isHidden = true
    }
}
}

提前致谢!!

您可以使用 collectionViewDelegate willDisplay 和 didEndDisplaying 方法来 start/stop 动画。而不是在配置单元格时。 - https://developer.apple.com/documentation/uikit/uicollectionviewdelegate 如果您希望动画只 运行 一次,请不要使用循环选项。

  if let cell = cell as? IntroductionCollectionViewCell {
     cell.animationView.loopMode = .playOnce
     cell.animationView.play()
  }

这就是答案,我需要检查我的单元格是否加载了 lottie 动画