2026-03-31

import UIKit
import Lottie

extension UIImage {
/// 【终极】Lottie JSON 文件名 → 生成 TabBar 图标(24x24,必显示)
static func fromLottie(
name: String,
size: CGSize = CGSize(width: 24, height: 24),
progress: CGFloat = 0
) -> UIImage? {

    // 1. 加载 Lottie
    let animation = LottieAnimation.named(name)
    let animationView = LottieAnimationView(animation: animation)
    
    // 2. 必须设置大小 + 布局
    animationView.frame = CGRect(origin: .zero, size: size)
    animationView.backgroundColor = .clear
    animationView.contentMode = .scaleAspectFit
    animationView.currentProgress = progress
    
    // 3. 关键:临时加到 keyWindow 让它渲染(否则不显示)
    if let window = UIApplication.shared.connectedScenes
        .filter({ $0.activationState == .foregroundActive })
        .compactMap({ $0 as? UIWindowScene })
        .first?.windows.first {
        
        window.addSubview(animationView)
        animationView.layoutIfNeeded()
        
        // 4. 渲染图片
        let renderer = UIGraphicsImageRenderer(size: size)
        let image = renderer.image { ctx in
            animationView.drawHierarchy(in: animationView.bounds, afterScreenUpdates: true)
        }
        
        // 5. 用完移除
        animationView.removeFromSuperview()
        
        return image.withRenderingMode(.alwaysOriginal)
    }
    
    return nil
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 微信小程序开发入门:基础组件与布局实战 在移动互联网轻量化开发的趋势下,微信小程序凭借“无需安装、触手可及、用完即...
    比奇堡派大星_236b阅读 16评论 0 0
  • 在超精密加工领域,如何让刀具在微观尺度上画出完美的椭圆轨迹,同时保证两个轴向的运动互不干扰,是长期困扰业界的难题。...
    拥抱世界和未来阅读 17评论 0 0
  • 概述 GPUImage是一个著名的图像处理开源库,它让你能够在图片、视频、相机上使用GPU加速的滤镜和其它特效。与...
    ghost_7fa3阅读 7,942评论 0 2
  • 2026年最全AI工具与大模型全景指南:ChatGPT、DeepSeek、Claude一站式解锁 AI工具越来越多...
    大乔家的阅读 24评论 0 0
  • AI工具导航:AI绘图、AI视频、AI短剧、AI Agent一站式指南 AI工具呈爆炸式增长,用户面对琳琅满目的选...
    大乔家的阅读 22评论 0 0

友情链接更多精彩内容