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 动画
我在使用 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 动画