Added autoplay control property to AnimatedImageView (autoPlayAnimatedImage)

This commit is contained in:
liulichao 2020-05-07 20:23:09 +08:00
parent 7a430b23b9
commit 03aaaac928
3 changed files with 50 additions and 22 deletions

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -20,6 +20,13 @@
*/ */
@interface SDAnimatedImageView : UIImageView @interface SDAnimatedImageView : UIImageView
/**
If the image has more than one frame, set this value to `YES` will automatically
play/stop the animation when the view become visible/invisible.
The default value is `YES`.
*/
@property (nonatomic) BOOL autoPlayAnimatedImage;
/** /**
Current display frame image. This value is KVO Compliance. Current display frame image. This value is KVO Compliance.
*/ */

View File

@ -93,6 +93,7 @@
{ {
// Pay attention that UIKit's `initWithImage:` will trigger a `setImage:` during initialization before this `commonInit`. // Pay attention that UIKit's `initWithImage:` will trigger a `setImage:` during initialization before this `commonInit`.
// So the properties which rely on this order, should using lazy-evaluation or do extra check in `setImage:`. // So the properties which rely on this order, should using lazy-evaluation or do extra check in `setImage:`.
self.autoPlayAnimatedImage = YES;
self.shouldCustomLoopCount = NO; self.shouldCustomLoopCount = NO;
self.shouldIncrementalLoad = YES; self.shouldIncrementalLoad = YES;
self.playbackRate = 1.0; self.playbackRate = 1.0;
@ -183,8 +184,12 @@
// Ensure disabled highlighting; it's not supported (see `-setHighlighted:`). // Ensure disabled highlighting; it's not supported (see `-setHighlighted:`).
super.highlighted = NO; super.highlighted = NO;
// Start animating if (self.autoPlayAnimatedImage) {
[self startAnimating]; // Start animating
[self startAnimating];
} else {
[self stopAnimating];
}
[self.imageViewLayer setNeedsDisplay]; [self.imageViewLayer setNeedsDisplay];
} }
@ -258,11 +263,13 @@
[super didMoveToSuperview]; [super didMoveToSuperview];
#endif #endif
[self updateShouldAnimate]; if (self.autoPlayAnimatedImage) {
if (self.shouldAnimate) { [self updateShouldAnimate];
[self startAnimating]; if (self.shouldAnimate) {
} else { [self startAnimating];
[self stopAnimating]; } else {
[self stopAnimating];
}
} }
} }
@ -278,11 +285,13 @@
[super didMoveToWindow]; [super didMoveToWindow];
#endif #endif
[self updateShouldAnimate]; if (self.autoPlayAnimatedImage) {
if (self.shouldAnimate) { [self updateShouldAnimate];
[self startAnimating]; if (self.shouldAnimate) {
} else { [self startAnimating];
[self stopAnimating]; } else {
[self stopAnimating];
}
} }
} }
@ -298,11 +307,13 @@
[super setAlpha:alpha]; [super setAlpha:alpha];
#endif #endif
[self updateShouldAnimate]; if (self.autoPlayAnimatedImage) {
if (self.shouldAnimate) { [self updateShouldAnimate];
[self startAnimating]; if (self.shouldAnimate) {
} else { [self startAnimating];
[self stopAnimating]; } else {
[self stopAnimating];
}
} }
} }
@ -310,11 +321,13 @@
{ {
[super setHidden:hidden]; [super setHidden:hidden];
[self updateShouldAnimate]; if (self.autoPlayAnimatedImage) {
if (self.shouldAnimate) { [self updateShouldAnimate];
[self startAnimating]; if (self.shouldAnimate) {
} else { [self startAnimating];
[self stopAnimating]; } else {
[self stopAnimating];
}
} }
} }