diff --git a/SDWebImage/Core/SDAnimatedImageView.m b/SDWebImage/Core/SDAnimatedImageView.m index 0d3ea034..dca55875 100644 --- a/SDWebImage/Core/SDAnimatedImageView.m +++ b/SDWebImage/Core/SDAnimatedImageView.m @@ -580,7 +580,7 @@ static NSUInteger SDDeviceFreeMemory() { } #if SD_MAC -- (void)displayDidRefresh:(CVDisplayLinkRef)displayLink duration:(NSTimeInterval)duration +- (void)displayDidRefresh:(CVDisplayLinkRef)displayLink #else - (void)displayDidRefresh:(CADisplayLink *)displayLink #endif @@ -590,9 +590,16 @@ static NSUInteger SDDeviceFreeMemory() { if (!self.shouldAnimate) { return; } - -#if SD_UIKIT + // Calculate refresh duration +#if SD_MAC + CVTimeStamp nowTime; + CVDisplayLinkGetCurrentTime(displayLink, &nowTime); + NSTimeInterval duration = (double)nowTime.videoRefreshPeriod / ((double)nowTime.videoTimeScale * nowTime.rateScalar); +#else +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" NSTimeInterval duration = displayLink.duration * displayLink.frameInterval; +#pragma clang diagnostic pop #endif NSUInteger totalFrameCount = self.totalFrameCount; NSUInteger currentFrameIndex = self.currentFrameIndex; @@ -786,13 +793,11 @@ static NSUInteger SDDeviceFreeMemory() { #if SD_MAC static CVReturn renderCallback(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 SDAnimatedImageView *imageView = (__bridge SDAnimatedImageView *)displayLinkContext; __weak SDAnimatedImageView *weakImageView = imageView; dispatch_async(dispatch_get_main_queue(), ^{ - [weakImageView displayDidRefresh:displayLink duration:duration]; + [weakImageView displayDidRefresh:displayLink]; }); return kCVReturnSuccess; }