forked from zelo72/mastodon-ios
30 lines
1.0 KiB
Swift
30 lines
1.0 KiB
Swift
|
//
|
||
|
// CellFrameCacheContainer.swift
|
||
|
// TwidereX
|
||
|
//
|
||
|
// Created by Cirno MainasuK on 2021-10-13.
|
||
|
// Copyright © 2021 Twidere. All rights reserved.
|
||
|
//
|
||
|
|
||
|
import UIKit
|
||
|
|
||
|
protocol CellFrameCacheContainer {
|
||
|
var cellFrameCache: NSCache<NSNumber, NSValue> { get }
|
||
|
|
||
|
func keyForCache(tableView: UITableView, indexPath: IndexPath) -> NSNumber?
|
||
|
}
|
||
|
|
||
|
extension CellFrameCacheContainer {
|
||
|
func cacheCellFrame(tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
|
||
|
guard let key = keyForCache(tableView: tableView, indexPath: indexPath) else { return }
|
||
|
let value = NSValue(cgRect: cell.frame)
|
||
|
cellFrameCache.setObject(value, forKey: key)
|
||
|
}
|
||
|
|
||
|
func retrieveCellFrame(tableView: UITableView, indexPath: IndexPath) -> CGRect? {
|
||
|
guard let key = keyForCache(tableView: tableView, indexPath: indexPath) else { return nil }
|
||
|
guard let frame = cellFrameCache.object(forKey: key)?.cgRectValue else { return nil }
|
||
|
return frame
|
||
|
}
|
||
|
}
|