Revert the code to SDAnimatedImageView, which break the pause and reusme speed

Fix the issue that SDAnimatedImageView on macOS will change the wrong duration speed when pause and resume again
This commit is contained in:
DreamPiggy 2019-10-27 04:08:25 +08:00
parent a42a22ff88
commit 8b14ca759d
1 changed files with 5 additions and 7 deletions

View File

@ -580,7 +580,7 @@ static NSUInteger SDDeviceFreeMemory() {
} }
#if SD_MAC #if SD_MAC
- (void)displayDidRefresh:(CVDisplayLinkRef)displayLink - (void)displayDidRefresh:(CVDisplayLinkRef)displayLink duration:(NSTimeInterval)duration
#else #else
- (void)displayDidRefresh:(CADisplayLink *)displayLink - (void)displayDidRefresh:(CADisplayLink *)displayLink
#endif #endif
@ -591,11 +591,7 @@ static NSUInteger SDDeviceFreeMemory() {
return; return;
} }
// Calculate refresh duration // Calculate refresh duration
#if SD_MAC #if SD_UIKIT
CVTimeStamp nowTime;
CVDisplayLinkGetCurrentTime(displayLink, &nowTime);
NSTimeInterval duration = (double)nowTime.videoRefreshPeriod / ((double)nowTime.videoTimeScale * nowTime.rateScalar);
#else
#pragma clang diagnostic push #pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations" #pragma clang diagnostic ignored "-Wdeprecated-declarations"
NSTimeInterval duration = displayLink.duration * displayLink.frameInterval; NSTimeInterval duration = displayLink.duration * displayLink.frameInterval;
@ -793,11 +789,13 @@ static NSUInteger SDDeviceFreeMemory() {
#if SD_MAC #if SD_MAC
static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext) { static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext) {
// Calculate refresh duration
NSTimeInterval duration = (double)inOutputTime->videoRefreshPeriod / ((double)inOutputTime->videoTimeScale * inOutputTime->rateScalar);
// CVDisplayLink callback is not on main queue // CVDisplayLink callback is not on main queue
SDAnimatedImageView *imageView = (__bridge SDAnimatedImageView *)displayLinkContext; SDAnimatedImageView *imageView = (__bridge SDAnimatedImageView *)displayLinkContext;
__weak SDAnimatedImageView *weakImageView = imageView; __weak SDAnimatedImageView *weakImageView = imageView;
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
[weakImageView displayDidRefresh:displayLink]; [weakImageView displayDidRefresh:displayLink duration:duration];
}); });
return kCVReturnSuccess; return kCVReturnSuccess;
} }