From 2428556b00d68488dc034291baf2e712736503cc Mon Sep 17 00:00:00 2001 From: NachoSoto Date: Thu, 3 Aug 2017 15:23:15 -0700 Subject: [PATCH] AsyncImageView: make placeholder renderer wait before real renderer to avoid flickering --- AsyncImageView/AsyncImageView.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AsyncImageView/AsyncImageView.swift b/AsyncImageView/AsyncImageView.swift index a9bce845..0974d3e9 100644 --- a/AsyncImageView/AsyncImageView.swift +++ b/AsyncImageView/AsyncImageView.swift @@ -66,6 +66,9 @@ open class AsyncImageView< if let placeholderRenderer = placeholderRenderer { return placeholderRenderer .renderImageWithData(data) + // Avoid flickering when the `placeholderRenderer` emits something + // right before the real `renderer`. + .delay(delayToWaitForRealRenderer, on: QueueScheduler()) .take(untilReplacement: renderer.renderImageWithData(data)) } else { return renderer.renderImageWithData(data) @@ -145,3 +148,4 @@ open class AsyncImageView< // MARK: - Constants private let fadeAnimationDuration: TimeInterval = 0.4 +private let delayToWaitForRealRenderer: TimeInterval = 0.2