Comments (9)
By designed issue.
The SDAnimatedImage
and _UIAnimatedImage
is not compatible.
If you use normal UIImageView to display GIF, which is indeed a bad idea. You can disable this by using the options override.
if context[.animatedImageClass] != SDAnimatedImgae.class {
context.options |= .decodeFirstFrameOnly
}
from sdwebimage.
By designed issue.
The
SDAnimatedImage
and_UIAnimatedImage
is not compatible.If you use normal UIImageView to display GIF, which is indeed a bad idea. You can disable this by using the options override.
if context[.animatedImageClass] != SDAnimatedImgae.class { context.options |= .decodeFirstFrameOnly }
This is indeed not a good idea, but we do have such a business scenario, mainly occurring when displaying network avatars.
I noticed that the solution you provided is to use a static image display, while my expectation is to enable UIImageView to play the animated image dynamically, rather than just displaying the first frame.
Currently, does SDWebImage not support this scenario?
from sdwebimage.
UIImageView is from Apple's UIKit, we can not change it's behavior or hook them
_UIAnimatedImage
is the only API to make the UIImageView
play animation. And, it's use CoreAnimation layer animation to replace each frame.
It can not supports to dynamic replacement himself.
Read more about why we introduce SDAnimatedImageView/SDAnimatedImage
and subclass UIImageView/UIImage
https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#animated-image-50
from sdwebimage.
I guess your question is:
Since SDAnimatedImage here contains a frame buffer pool, when I create another
UIImage
for the same image (means, the Data), can we steal the frame from it ?
Maybe, but this cause huge complicated.
If I really really has two image view, one is
UIImageView
, another isSDAnimatedImage
, and want both of them showing the animation GIF, how can I do ?
Well, you can. Using the option SDWebImageMatchAnimatedImageClass
. See why I introduce that option
#2801
Pay attention for RAM usage. UIAnimatedImage
will always occupy bytesPerFrame * frame count
, which means, a 1000*1000 100 frame GIF will occupy 381MB RAM
from sdwebimage.
Oh, seems that SDWebImageMatchAnimatedImageClass
does not solve this case. It will only ensure:
- Cached image is
UIImage
, but consumer isSDAnimatedImageView
. Will assumecache miss
and re-decoding
I guess your case seems to be:
- Cached image is
SDAnimatedImage
, but consumer isUIImageView
from sdwebimage.
Oh, seems that
SDWebImageMatchAnimatedImageClass
does not solve this case. It will only ensure:
- Cached image is
UIImage
, but consumer isSDAnimatedImageView
. Will assumecache miss
and re-decodingI guess your case seems to be:
- Cached image is
SDAnimatedImage
, but consumer isUIImageView
I understand, but the cost of replacing all UIImageViews that could potentially display animated images with SDAnimatedImageView in our application is somewhat high. Therefore, my current solution involves hooking the cacheKeyForURL:context: method and setting the key through SDWebImageContextAnimatedImageClass for identification. However, this approach is not quite elegant, and it also results in storing three identical copies of the data on the disk. So, I am still in the process of finding a better solution.
from sdwebimage.
Need changes about how image stored and queried. A better design is to store both, with a modified key. Or using a more hackey way
A more hackey way can be like. UIImage instance use associated object to retain the SDAnimatedImage, or the reversed.
from sdwebimage.
The original design of SDAnimatedImage
because I don't think people still preferrs to use _UIAnimatedImage
, which has high ratio from the design to cause OOM (which retain a NSArray<UIImage *>
in memory, bad thing)
from sdwebimage.
Thank you, I already know what to do.
from sdwebimage.
Related Issues (20)
- Set UIImageView.sd_imageTransition, new image request cannot cancel the animation of the previous request HOT 13
- 部分jpg图片链接无法显示的问题,channelPicUrlImgView.sd_setImage(with: URL(string: model?.channelPicUrl ?? ""), placeholderImage: UIImage(named: "placeholder.png")) HOT 8
- Deprecation of the UIGraphicsBeginImageContextWithOptions in Xcode15 #2200 HOT 2
- Error installing SDWebImage HOT 1
- iOS17 privacy policy HOT 3
- issue with `SDImageCache.sharedImageCache` HOT 32
- Replace NSFileManager.enumeratorAtPath with enumeratorAtURL HOT 1
- NSCoding Cyber Security Issue Founding: any Remediation? HOT 2
- Report an error: UIImageView+WebCache.m normal arm64 objective-c HOT 1
- Which version of SDWebImage is the most stable? HOT 1
- About PrivacyInfo.xcprivacy
- 隐私清单 HOT 1
- Using Apple's ImageIO on iOS 17 cause APNG pictures flicker abnormally HOT 17
- Image cache behavior question HOT 2
- iOS 12.1.2 heic 解码失败 HOT 1
- Crashing while setting force decode policy. HOT 6
- [Crash] - [NSConcreteData dealloc] EXC_BAD_ACCESS (KERN_INVALID_ADDRESS) HOT 1
- 5.18.4+ SDAnimatedImage static image support performance issue HOT 11
- Binary makes use of insecure APIs: sscanf,malloc functions HOT 1
- App Rejected due to ITMS-91065: Missing signature in SDWebImage HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sdwebimage.