如何解决WatchOS:SDWebImageLottieCoder 在手表应用程序运行时加载新动画
我正在关注 this tutorial 以在 WatchOS 上使用 Lottie 动画库。它一直在工作,直到我尝试在应用程序运行时更改动画。即使我改变了它,动画保持不变,直到我从 Xcode 运行手表应用程序。 (如果我只是关闭应用程序并再次打开它不会改变。) 我试过的:
- 清除监视文件系统中的缓存
- 清除
URLCache
- 清除
SDImageCache
内存和磁盘
解决方法
您是对的,缓存会导致您的问题。然而,你还不够深入。
您使用 SDWebImageLottieCoder 来显示您的动画,而动画又使用 rlottie。
根据他们的自述文件: “rlottie 是一个独立于平台的独立 C++ 库,用于实时渲染基于矢量的动画和艺术。”
关键是动画是由rlottie框架缓存的,所以清除URLCache
和SDImageCache
都不能解决这个问题。
解决这个问题最简单的方法是修改rlottie
C++ 库中的代码。在您的 Xcode 项目中,导航到 Pods
-> Pods
-> librlottie
并查找以下文件:lottieanimation_capi.cpp
在此文件中搜索以下代码:
RLOTTIE_API Lottie_Animation_S *lottie_animation_from_data(const char *data,const char *key,const char *resourcePath)
{
if (auto animation = Animation::loadFromData(data,key,resourcePath) ) {
Lottie_Animation_S *handle = new Lottie_Animation_S();
handle->mAnimation = std::move(animation);
return handle;
} else {
return nullptr;
}
}
这是在您的设备上加载 Lottie 动画并负责缓存的代码。 loadFromData
需要一个额外的第四个参数,称为 cachePolicy
,它是一个布尔值,在这种情况下没有传递任何东西。
因此,如果您不想缓存动画,则将 false 传递到此调用中。 将代码修改为此,它应该可以工作:
RLOTTIE_API Lottie_Animation_S *lottie_animation_from_data(const char *data,resourcePath,false) ) {
Lottie_Animation_S *handle = new Lottie_Animation_S();
handle->mAnimation = std::move(animation);
return handle;
} else {
return nullptr;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。