你是对的,缓存会导致你的问题。但是,你还不够深入。
您使用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, const char *key, const char *resourcePath)
{
if (auto animation = Animation::loadFromData(data, key, resourcePath, false) ) {
Lottie_Animation_S *handle = new Lottie_Animation_S();
handle->mAnimation = std::move(animation);
return handle;
} else {
return nullptr;
}
}