Swift加载Lottie

news/2024/9/23 19:55:54/

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/news/1440216.html

相关文章

深入浅出MySQL-04-【常用函数】

文章目录 前言1.字符串函数2.数值函数3.日期和时间函数4.流程函数5.JSON函数5.1.创建JSON函数5.2.查询JSON函数5.3.修改JSON的函数5.4.查询JSON元数据函数5.5.JSON工具函数 6.窗口函数7.其他函数 前言 环境&#xff1a; Window11MySQL-8.0.35 1.字符串函数 最常用的一种函数…

通用视觉多模态大模型 一统理解/生成/分割/编辑

这是一款通用视觉多模态大模型&#xff0c;支持从视觉理解到视觉生成、从低层次到高层次的一系列视觉任务&#xff0c;解决了困扰大语言模型产业已久的图像/视频模型割裂问题&#xff0c;提供了一个全面统一静态图像与动态视频内容的理解、生成、分割、编辑等任务的像素级通用视…

Windows python3.10安装psbody

Windows环境下安装psbody 下载mesh GitHub - MPI-IS/mesh: MPI-IS Mesh Processing Library 下载安装boost Boost Downloads 解压到 D:\software\boost_1_85_0&#xff0c;这个路径后面要设置为环境变量 BOOST_ROOT 的值。 添加 BOOST_ROOT 环境变量 您可以通过图形界面配…

uniapp使用地图开发app

使用uniapp开发app中使用到地图的坑&#xff1a; 1、简单使用地图的功能比较简单&#xff0c;仅使用到地图选点和定位功能&#xff1a;&#xff08;其中问题集中在uni.chooseLocation中&#xff09;下面是api官网地址 uni.getLocation(OBJECT) | uni-app官网 官方建议app端使…

设计模式——终止模式之两阶段终止模式

文章目录 1. 错误思路2. 两阶段终止模式2.1 利用 isInterrupted2.2 利用停止标记interrupt-打断park Two Phase Termination 在一个线程 T1 中如何“优雅”终止线程 T2&#xff1f;这里的【优雅】指的是给 T2 一个料理后事的机会。 1. 错误思路 使用线程对象的 stop() 方法停…

深度学习系列64:数字人wav2lip详解

1. 整体流程 第一步&#xff0c;加载视频/图片和音频/tts。用melspectrogram将wav文件拆分成mel_chunks。 第二步&#xff0c;调用face_detect模型&#xff0c;给出人脸检测结果&#xff08;可以改造成从文件中读取&#xff09;&#xff0c;包装成4个数组batch&#xff1a;img…

记账本React案例(Redux管理状态)

文章目录 整体架构流程 环境搭建 创建项目 技术细节 一、别名路径配置 1.路径解析配置&#xff08;webpack&#xff09; &#xff0c;将/解析为src/ 2.路径联想配置&#xff08;vsCode&#xff09;&#xff0c;使用vscode编辑器时&#xff0c;自动联想出来src文件夹下的…

int和byte数组相互转换详解

转换之前我们需要了解各种进制之间的关系&#xff0c;不太了解的可以先看下计算机组成原理和体系 这篇文章 byte byte是字节的意思&#xff0c;一个字节等于8位&#xff0c;范围是 0000 0000 ~ 1111 1111(十六进制&#xff1a;0x0~0xff),总共包含256个数。 有符号的byte表示的…