From 90dc3329d1973fda691e357cf4523d5c7c67fa1d Mon Sep 17 00:00:00 2001 From: 杨锴 <841720330@qq.com> Date: 星期二, 11 三月 2025 12:23:53 +0800 Subject: [PATCH] fix bug --- Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m | 73 ++++++++++++++++++++++++++++++++++++ 1 files changed, 72 insertions(+), 1 deletions(-) diff --git a/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m b/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m index 7e73367..193652d 100644 --- a/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m +++ b/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m @@ -15,6 +15,70 @@ #import "SDInternalMacros.h" #import "objc/runtime.h" +// A wrapper to implements the transformer on animated image, like tint color +@interface SDAnimatedImageFrameProvider : NSObject <SDAnimatedImageProvider> +@property (nonatomic, strong) id<SDAnimatedImageProvider> provider; +@property (nonatomic, strong) id<SDImageTransformer> transformer; +@end + +@implementation SDAnimatedImageFrameProvider + +- (instancetype)initWithProvider:(id<SDAnimatedImageProvider>)provider transformer:(id<SDImageTransformer>)transformer { + self = [super init]; + if (self) { + _provider = provider; + _transformer = transformer; + } + return self; +} + +- (NSUInteger)hash { + NSUInteger prime = 31; + NSUInteger result = 1; + NSUInteger providerHash = self.provider.hash; + NSUInteger transformerHash = self.transformer.transformerKey.hash; + result = prime * result + providerHash; + result = prime * result + transformerHash; + return result; +} + +- (BOOL)isEqual:(id)object { + if (nil == object) { + return NO; + } + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + return self.provider == [object provider] + && [self.transformer.transformerKey isEqualToString:[object transformer].transformerKey]; +} + +- (NSData *)animatedImageData { + return self.provider.animatedImageData; +} + +- (NSUInteger)animatedImageFrameCount { + return self.provider.animatedImageFrameCount; +} + +- (NSUInteger)animatedImageLoopCount { + return self.provider.animatedImageLoopCount; +} + +- (NSTimeInterval)animatedImageDurationAtIndex:(NSUInteger)index { + return [self.provider animatedImageDurationAtIndex:index]; +} + +- (UIImage *)animatedImageFrameAtIndex:(NSUInteger)index { + UIImage *frame = [self.provider animatedImageFrameAtIndex:index]; + return [self.transformer transformedImageWithImage:frame forKey:@""]; +} + +@end + @interface UIImageView () <CALayerDelegate> @end @@ -139,7 +203,14 @@ provider = (id<SDAnimatedImage>)image; } // Create animated player - self.player = [SDAnimatedImagePlayer playerWithProvider:provider]; + if (self.animationTransformer) { + // Check if post-transform animation available + provider = [[SDAnimatedImageFrameProvider alloc] initWithProvider:provider transformer:self.animationTransformer]; + self.player = [SDAnimatedImagePlayer playerWithProvider:provider]; + } else { + // Normal animation without post-transform + self.player = [SDAnimatedImagePlayer playerWithProvider:provider]; + } } else { // Update Frame Count self.player.totalFrameCount = [(id<SDAnimatedImage>)image animatedImageFrameCount]; -- Gitblit v1.7.1