OC使用时,需要通过swift透出方法供OC使用
// 此处文件名可以从Build Settings下搜索Generated Header Name的值得出
#import <Test-Swift.h>
一、导入包
target 'iOS' douse_frameworks!# 此处pod 'lottie-ios'
end
二、功能实现
1. 创建组件
swift">import Lottie@objcMembers class LottieAnimView: UIView, UIScrollViewDelegate {static let sharedManager: LottieAnimView = LottieAnimView()private var lotView: AnimationView = AnimationView()func createLottieView(path: String) {let sp = path.components(separatedBy: ".")if let filePath = Bundle.main.path(forResource: sp.first!, ofType: "json") {let animation = Animation.filepath(filePath)lotView.animation = animation}// 修改fill方式lotView.contentMode = .scaleToFill// true:视图会使用旧版的 Autoresizing Mask 来进行布局。这意味着视图的位置和大小将根据其父视图的边界和自身的自动布局规则进行自动调整// false:视图将使用 Auto Layout 进行布局。这意味着你可以通过约束(constraints)来精确地定义视图的位置、大小和相对关系。// 如果不设置此处,则设置宽高无效。好像只有在动态修改frame时无效lotView.translatesAutoresizingMaskIntoConstraints = truelotView.loopMode = .looplotView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)// 添加点击事件let tapGesture = UITapGestureRecognizer(target: self, action: #selector(animationViewTapped))lotView.addGestureRecognizer(tapGesture)lotView.isUserInteractionEnabled = true// 此处根据需要添加到父级ViewController上UIApplication.shared.keyWindow?.rootViewController?.view.addSubview(lotView)}@objc func animationViewTapped(sender: UITapGestureRecognizer) {// 可以根据sender.view获取AnimationViewprint("点击了AnimationView")}
}
2. 常用方法
swift">// 1. 播放
lotView.play()// 2. 暂停
lotView.pause()// 3. 取消
lotView.stop()
三、注意
- 可以动态修改loopMode方式
- 我们的使用场景是在lua层先调用createLottieView,之后立马play,此时发现会动画卡在第一帧,怀疑是线程堵塞,在play之前让出CPU的时间片1个游戏帧即可