@@ -45,6 +45,7 @@ static inline SDImageFormat SDImageFormatFromYYImageType(YYImageType type) {
4545@interface SDImageYYCoder ()
4646
4747@property (nonatomic , strong ) YYImageDecoder *decoder;
48+ @property (nonatomic , assign ) BOOL lazyDecode;
4849
4950@end
5051
@@ -190,7 +191,17 @@ - (instancetype)initIncrementalWithOptions:(SDImageCoderOptions *)options {
190191 scale = 1 ;
191192 }
192193 }
193- self.decoder = [[YYImageDecoder alloc ] initWithScale: scale];
194+ BOOL lazyDecode = NO ; // Defaults NO for animated image coder
195+ NSNumber *lazyDecodeValue = options[SDImageCoderDecodeUseLazyDecoding];
196+ if (lazyDecodeValue != nil ) {
197+ lazyDecode = lazyDecodeValue.boolValue ;
198+ }
199+ _lazyDecode = lazyDecode;
200+ YYImageDecoder *decoder = [[YYImageDecoder alloc ] initWithScale: scale];
201+ if (!decoder) {
202+ return nil ;
203+ }
204+ _decoder = decoder;
194205 }
195206
196207 return self;
@@ -226,11 +237,17 @@ - (instancetype)initWithAnimatedImageData:(NSData *)data options:(SDImageCoderOp
226237 scale = 1 ;
227238 }
228239 }
240+ BOOL lazyDecode = NO ; // Defaults NO for animated image coder
241+ NSNumber *lazyDecodeValue = options[SDImageCoderDecodeUseLazyDecoding];
242+ if (lazyDecodeValue != nil ) {
243+ lazyDecode = lazyDecodeValue.boolValue ;
244+ }
245+ _lazyDecode = lazyDecode;
229246 YYImageDecoder *decoder = [YYImageDecoder decoderWithData: data scale: scale];
230247 if (!decoder) {
231248 return nil ;
232249 }
233- self. decoder = decoder;
250+ _decoder = decoder;
234251 }
235252 return self;
236253}
@@ -248,7 +265,7 @@ - (NSUInteger)animatedImageLoopCount {
248265}
249266
250267- (UIImage *)animatedImageFrameAtIndex : (NSUInteger )index {
251- YYImageFrame *frame = [self .decoder frameAtIndex: index decodeForDisplay: NO ];
268+ YYImageFrame *frame = [self .decoder frameAtIndex: index decodeForDisplay: ! self .lazyDecode ];
252269 return frame.image ;
253270}
254271
0 commit comments