lottie深入玩法

A、json文件和圖片資源分開
delete 是json資源名字

/res/lottie/delete_anim_images是圖片資源文件夾路徑
JSON 中引用的圖片名,必須與實際圖片文件名一致

?

B、json文件和圖片資源分開,并且圖片加載不固定

比如我有7張圖片,分別命名1~7,我可以根據邏輯從這7張圖片里面選3張圖片,放到lottie里面顯示嗎?
?

Lottie 本身不支持在動畫過程中動態替換圖片(比如從一堆圖片中動態挑選幾張替換),因為它的圖片資源是綁定在 JSON 文件里的,JSON 中的 assets 數組會預定義所有圖片名和 ID。

但!我們可以通過 “間接替換圖片”

? 能實現需求的方法一:使用動態 ImageProvider 替換指定 ID 對應的圖片

lottie-ios 4.x 中,你可以通過 實現自定義 ImageProvider 的方式,讓某個 ID 返回你希望的圖片內容。

🛠? 一、動畫 JSON 的設計要求(由設計師完成)

使用 Adobe After Effects + Bodymovin 插件導出

?關鍵要求

  • 設計師添加 3 個圖片圖層(img1、img2、img3)

  • 命名保持統一(就是圖層名叫 img1img2img3

  • 每個圖層引用一張占位圖(比如 placeholder.png)

  • 導出時取消勾選 Embed Image(不要將圖片嵌入 JSON)

  • 勾選導出圖像 → 會導出 JSON 和圖像目錄

最終導出結果是一個 .json 文件 + 一個 images 文件夾,文件夾里包含 img1.pngimg2.pngimg3.png(占位圖)

🧱 二、你的 App 中資源結構如下:

📦 MyApp
├── Assets
│   ├── lottie_template.json
│   └── images
│       ├── 1.png
│       ├── 2.png
│       ├── 3.png
│       ├── 4.png
│       ├── 5.png
│       ├── 6.png
│       └── 7.png

🧩 三、自定義 ImageProvider 來實現圖片替換

class DynamicImageProvider: AnimationImageProvider {private let imageMap: [String: UIImage]init(imageMap: [String: UIImage]) {self.imageMap = imageMap}func imageForAsset(asset: ImageAsset) -> CGImage? {// asset.name 是 JSON 中 image 圖層的 name,例如 "img1"guard let image = imageMap[asset.name] else { return nil }return image.cgImage}
}

🧪 四、使用示例代碼(Swift 5.0)

// 假設你有 1~7.png 放在項目中
let allImageNames = ["1", "2", "3", "4", "5", "6", "7"]
let selected = allImageNames.shuffled().prefix(3)let imageMap: [String: UIImage] = ["img1": UIImage(named: selected[0])!,"img2": UIImage(named: selected[1])!,"img3": UIImage(named: selected[2])!
]let provider = DynamicImageProvider(imageMap: imageMap)guard let animation = LottieAnimation.named("lottie_template") else { return }let animationView = LottieAnimationView(animation: animation, imageProvider: provider)
animationView.frame = view.bounds
animationView.contentMode = .scaleAspectFit
animationView.loopMode = .loop
animationView.play()view.addSubview(animationView)

? 效果:每次啟動動畫時都會在 img1、img2、img3 圖層上顯示隨機選的圖片 🎉

? 前提是你的 Lottie JSON 中,assets 用的是 "img1", "img2" 這樣的 ID。然后你可以在運行時替換這些 ID 對應的 UIImage 內容。

👀 注意事項

  • imageMap 中的 key 一定要與 JSON 中的圖層名字一致(比如 "img1"

  • 圖片名與 UIImage(named:) 要匹配,確保加入到 Xcode 工程或 Assets 里

  • JSON 動畫圖層是固定的 3 個,你替換的是內容,不是數量

    ? 優點

  • 一個 JSON 動畫文件即可

  • 圖片資源獨立管理,邏輯控制簡單

  • 沒有生成多個動畫文件,App 體積更小

疑問?

🕹? imageForAsset 是什么時候調用的?

  • 當你用下面代碼播放動畫時:

let animationView = LottieAnimationView(animation: animation, imageProvider: provider)
animationView.play()
  • animationView.play() 開始渲染動畫時,Lottie 內部會解析 JSON,發現某些圖層是圖片(例如 "img1"

  • 然后 Lottie 就會調用你寫的 imageForAsset(asset:) 方法 來獲取它需要的圖片

也就是說:

每當動畫里有個 image 圖層需要渲染,都會走一次 imageForAsset() —— 你可以在里面決定顯示哪張圖!

💥 會不會沖突?

不會!你自定義了 ImageProvider,Lottie 會優先走你提供的圖:

  • 如果你沒設置 imageProvider,它就會去讀 "img1.png" 文件

  • 如果你設置了自定義 DynamicImageProvider,它就會調用:

imageForAsset(asset: ImageAsset(name: "img1"))

你返回什么圖,它就顯示什么圖,和 JSON 原來的 p: img1.png 沒關系了!

C、網絡加載lottie(自己研究吧~很簡單)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902110.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902110.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902110.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高精度算法(加、減、乘、除、階乘和)?

歸納編程學習的感悟, 記錄奮斗路上的點滴, 希望能幫到一樣刻苦的你! 如有不足歡迎指正! 共同學習交流! 🌎歡迎各位→點贊 👍 收藏? 留言?📝 唯有主動付出,才有豐富的果…

探索大語言模型(LLM):馬爾可夫鏈——從詩歌分析到人工智能的數學工具

提出背景與靈感起源 馬爾可夫鏈由俄國數學家安德雷馬爾可夫于1906年提出,最初是為了挑戰當時概率論中“獨立性假設”的局限性。他希望通過研究相依變量序列,證明即使隨機變量之間存在依賴關系,大數定律和中心極限定理仍然成立。 靈感來源&am…

【web服務_負載均衡Nginx】三、Nginx 實踐應用與高級配置技巧

一、Nginx 在 Web 服務器場景中的深度應用? 1.1 靜態網站部署與優化? 在 CentOS 7 系統中,使用 Nginx 部署靜態網站是最基礎也最常見的應用場景。首先,準備網站文件,在/var/www/html目錄下創建index.html文件: sudo mkdir -p…

C語言格式化輸入輸出總結 (printf和scanf)

一、printf格式化輸出 1. 整數格式化 (%d, %i, %u, %o, %x) c復制代碼 int num 42; // 以下為不同格式輸出示例 printf("%d", num); // 42 (十進制) printf("%i", num); // 42 (同%d) printf("%u", num); // 42 (無符號十進制…

哈夫曼編碼和哈夫曼樹

哈夫曼編碼(Huffman Coding) 是一種基于字符出現頻率的無損數據壓縮算法,通過構建哈夫曼樹(Huffman Tree) 來生成最優前綴編碼,使得高頻字符用短編碼,低頻字符用長編碼,從而實現高效…

Jetson Orin NX 部署YOLOv12筆記

步驟一.創建虛擬環境 conda create -n yolov12 python3.8.20 注意:YOLOv12/YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7a/YOLOv5 環境通用 步驟二.激活虛擬環境 conda activate yolov12 #激活環境 步驟三.查詢Jetpack出廠版本 Jetson系列平臺各型號支持的最高Jetp…

Linux指令篇 (2)

指令篇(2) Linux基本指令(2)(1) mkdir指令(重要)(2)rmdir指令&&rm指令(重要)(3)man指令(重要)(4)cp指令(重要&…

致遠OA——自定義開發rest接口

文章目錄 :apple: 業務流程 🍎 業務流程 代碼案例: https://pan.quark.cn/s/57fa808c823f 官方文檔: https://open.seeyoncloud.com/seeyonapi/781/https://open.seeyoncloud.com/v5devCTP/39/783.html 登錄系統 —— 后臺管理 —— 切換系…

區塊鏈如何成為智能城市的底層引擎?從數據透明到自動化治理

區塊鏈如何成為智能城市的底層引擎?從數據透明到自動化治理 引言:智能城市真的智能嗎? 在數字化時代,智能城市(Smart City)逐步成為各國推動城市創新的重要方向。城市管理者希望借助物聯網(IoT…

洛谷P1177【模板】排序:十種排序算法全解(1)

扯談 之前我已經把十大排序算法全講了一遍(具體詳見專欄C排序算法),今天我們來用一道簡單的題目總結實戰一下。 算法實現 一、桶排序(Bucket Sort) ?適用場景?:數據范圍已知且較小(需根據測試數據調整…

SuperMap iClient3D for WebGL 如何加載WMTS服務

在 SuperMap iClient3D for WebGL 中加載WMTS服務時,參數配置很關鍵!下面我們詳細介紹如何正確填寫參數,確保影像服務完美加載。 一、數據制作 對于上述視頻中的地圖制作,此處不做講述,如有需要可訪問:Onl…

再讀bert(Bidirectional Encoder Representations from Transformers)

再讀 BERT,仿佛在數字叢林中邂逅一位古老而智慧的先知。初次相見時,驚嘆于它以 Transformer 架構為羅盤,在預訓練與微調的星河中精準導航,打破 NLP 領域長久以來的迷霧。而如今,書頁間躍動的不再僅是 Attention 機制精…

從零開始 保姆級教程 Ubuntu20.04系統安裝MySQL8、服務器配置MySQL主從復制、本地navicat遠程連接服務器數據庫

從零開始:Ubuntu 20.04 系統安裝 MySQL 8、服務器配置 MySQL 主從復制、本地 Navicat 遠程連接服務器數據庫 初始化服務器1. 更新本地軟件包列表2. 安裝 MySQL 服務器3. 查看 MySQL 安裝版本4. 登錄 MySQL 管理終端5. 設置 root 用戶密碼(推薦使用 nativ…

java怎么完善注冊,如果郵箱中途更換,能否判斷

解析在下面 附贈代碼 private static class CodeInfo {String code;long timestamp;CodeInfo(String code, long timestamp) {this.code code;this.timestamp timestamp;}}// 存儲驗證碼(郵箱 -> 驗證碼信息)(保證線程安全) 以免中途更改郵箱pri…

n8n 中文系列教程_01. 簡單易懂的現代AI魔法,n8n的快速了解與概念科普(文末有彩蛋)

1. 教程簡介 歡迎來到“無代碼工具探索”課程,這是專為非技術人員設計的指南(當然,技術人員也可以從中受益)。我們的目標是通過無代碼工具來提升工作效率,尤其是利用像 n8n 這樣的靈活數據庫平臺。這些工具被譽為“現…

解碼 Web Service:從技術原理到應用場景的深度剖析

Web Service 是一種基于網絡的、分布式的計算技術,它允許不同的應用程序之間通過網絡進行通信和交互。以下是關于 Web Service 的詳細介紹: 一、定義與概念 Web Service 是一種可以通過 Web 協議(如 HTTP)進行訪問的軟件組件&am…

Nacos啟動報錯

Nacos啟動是在單機模式下,不是集群模式 點擊startup.cmd啟動會報錯 打開bin目錄 rem是注釋的意思,在nacos1.3.2之后,nacos默認的都是集群模式,我們這里單機測試就是用單機模式。 也可以修改MODE,如果選擇不修改&…

uniapp-商城-26-vuex 使用流程

為了能在所有的頁面都實現狀態管理,我們按照前面講的頁面進行狀態獲取,然后再進行頁面設置和布局,那就是重復工作,vuex 就會解決這樣的問題,如同類、高度提煉的接口來幫助我們實現這些重復工作的管理。避免一直在造一樣…

Git 命令速查手冊

聽說用美圖可以釣讀者? 一、基礎操作核心命令 1. 倉庫初始化與克隆 命令作用示例git init創建新倉庫git init my-projectgit clone克隆遠程倉庫git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add關聯遠程倉庫git re…

信息量、香農熵、交叉熵、KL散度總結

信息量 對于一個事件而言,它一般具有三個特征: 小概率事件往往具有較大的信息量 大概率事件往往具有較小的信息量 獨立事件的信息量相互可以相加 比如我們在買彩票這個事件中,彩票未中獎的概率往往很高,對我們而言一點也不稀…