From d51bb201d6dfffb0ce386f51634cf822b009d22a Mon Sep 17 00:00:00 2001 From: Michelle Linington Date: Sat, 23 Jan 2021 05:50:52 -0800 Subject: [PATCH] Reuse cover views when rebuilding sticker management table Creating fresh cover views resets the animation playback and causes weird flicker. If we just cache the views that we're already using then we can avoid the flicker. Eventually we should move this table towards reusable cells, but until then, reusable image views will have to do. --- .../Stickers/ManageStickersViewController.swift | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Signal/src/ViewControllers/Stickers/ManageStickersViewController.swift b/Signal/src/ViewControllers/Stickers/ManageStickersViewController.swift index 73b86e9eab..7474fadc2b 100644 --- a/Signal/src/ViewControllers/Stickers/ManageStickersViewController.swift +++ b/Signal/src/ViewControllers/Stickers/ManageStickersViewController.swift @@ -123,6 +123,7 @@ public class ManageStickersViewController: OWSTableViewController { private var installedStickerPackSources = [StickerPackDataSource]() private var availableBuiltInStickerPackSources = [StickerPackDataSource]() private var knownStickerPackSources = [StickerPackDataSource]() + private var coverInfoViewCache = [Data: UIView]() private func updateState() { // If we're presenting a modal because the user tapped install, dismiss it. @@ -343,10 +344,11 @@ public class ManageStickersViewController: OWSTableViewController { let authorNameValue: String? = dataSource.author?.filterForDisplay let iconView: UIView - if let stickerInfo = stickerInfo, - let coverView = imageView(forStickerInfo: stickerInfo, - dataSource: dataSource) { + if let stickerInfo = stickerInfo, let cachedView = coverInfoViewCache[stickerInfo.packId] { + iconView = cachedView + } else if let stickerInfo = stickerInfo, let coverView = imageView(forStickerInfo: stickerInfo, dataSource: dataSource) { iconView = coverView + coverInfoViewCache[stickerInfo.packId] = coverView } else { iconView = UIView() }