• Swift加载Lottie


    OC使用时,需要通过swift透出方法供OC使用

    // 此处文件名可以从Build Settings下搜索Generated Header Name的值得出
    #import <Test-Swift.h>
    
    • 1
    • 2

    一、导入包

    target 'iOS' do
      use_frameworks!
      
      # 此处
      pod 'lottie-ios'
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、功能实现

    1. 创建组件

    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 = true
          
          lotView.loopMode = .loop
          
          lotView.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获取AnimationView
            print("点击了AnimationView")
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    2. 常用方法

    // 1. 播放
    lotView.play()
    
    // 2. 暂停
    lotView.pause()
    
    // 3. 取消
    lotView.stop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    三、注意

    1. 可以动态修改loopMode方式
    2. 我们的使用场景是在lua层先调用createLottieView,之后立马play,此时发现会动画卡在第一帧,怀疑是线程堵塞,在play之前让出CPU的时间片1个游戏帧即可
  • 相关阅读:
    Java中ThreadLocal的用法和原理
    eyb:Redis的学习(1)
    “go1.15.3“ does not match go tool version “go1.13.8“
    前端js面试题 (一)
    文生图一致性角色生成!谷歌最新文本到图片扩散模型工作
    大模型如何赋能智能客服
    计算机毕业设计之汽车销售管理系统
    【GDB】使用 GDB 自动画红黑树
    Science:“消除噪音”量子比特实现了纠错的重大突破
    使用IDEA 将Eclipse java工程转为maven格式
  • 原文地址:https://blog.csdn.net/qq_38779672/article/details/138160050