Swift加载Lottie

ops/2024/9/23 19:55:56/

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()

三、注意

  1. 可以动态修改loopMode方式
  2. 我们的使用场景是在lua层先调用createLottieView,之后立马play,此时发现会动画卡在第一帧,怀疑是线程堵塞,在play之前让出CPU的时间片1个游戏帧即可

http://www.ppmy.cn/ops/13271.html

相关文章

为什么你的抖店总做不好?原因就在这里,你中招了吗?

大家好&#xff0c;我是电商花花。 最近&#xff0c;在评论区看到评论“别人都说十个做抖店&#xff0c;九个失败”&#xff0c;甚至有有新手朋友来找我咨询也是这样说的。 面对这样的问题&#xff0c;我来说一下我的看法&#xff1a; 我认为做不起来并不是平台的原因&#…

Sentinel 流控注解使用

大概原理&#xff1a;通过反射解析注解 SentinelResource信息完成调用&#xff0c;处理方法&#xff0c;类似AOP编程 处理方法的返回类型要保持一致&#xff0c;参数和顺序保持一致&#xff0c; 可以在参数列表最后加 com.alibaba.csp.sentinel.slots.block.BlockException; …

53.基于微信小程序与SpringBoot的戏曲文化系统设计与实现(项目 + 论文)

项目介绍 本站采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的戏曲文化系统设计与实现管理工作系统化、规范化。 技术选型 后端:…

Spring MVC和Spring Boot

上节已经提到过请求&#xff0c;这次梳理响应。 响应 响应基本上都要被Controller所托管&#xff0c;告诉Spring帮我们管理这个代码&#xff0c;我们在后面需要访问时&#xff0c;才可以进行访问&#xff0c;否则将会报错。并且其是由RestController分离出来的&#xff0c;Re…

Java类加载

1. 类加载过程 1.1 类加载概述 类加载是Java虚拟机&#xff08;JVM&#xff09;将类的字节码加载到内存&#xff0c;并将其转换为可以被JVM执行的对象的过程。Java的类加载是Java语言的重要特性之一。 学习类加载有助于我们更深入地理解 JAVA 类成员的初始化过程和运行过程&am…

跨站攻击CSRF实验

1.low等级 先利用Burp抓包 将get响应的url地址复制&#xff0c;发到网页上&#xff08;Low等级到这完成&#xff09; Medium&#xff1a; 再将抓到的包发到Repeater上,对请求中的Referer进行修改&#xff0c;修改成和url一样的地址&#xff0c;修改成功。 在这里修改后发送 然…

齐护K210系列教程(十)_播放SD视频avi文件

播放SD视频avi文件 播放带音频的视频&#xff0c;声音部分只支持带喇叭的型号&#xff1a;AIstart_掌机、AIstart_Mini&#xff0c;其它型号只能看到视频无声音。 请确保SD卡中有对应的avi文件。 视频文件要求是AVI格式&#xff0c;320(宽)*240(高)&#xff0c;视频编码器&q…

安装kali虚拟机

第一步&#xff1a;安装vmware 安装到最后&#xff0c;会提示输入序列号 安装成功后的图标 第二步&#xff1a;创建一个虚拟主机 创建了一个虚拟机 第三步&#xff1a;给虚拟机安装系统 安装系统&#xff0c;都必须有 系统镜像文件 一般系统镜像文件的后缀是 .iso 第一步&a…