// // MediaPreviewableViewController.swift // Mastodon // // Created by MainasuK Cirno on 2021-4-28. // import UIKit protocol MediaPreviewableViewController: UIViewController { var mediaPreviewTransitionController: MediaPreviewTransitionController { get } func sourceFrame(transitionItem: MediaPreviewTransitionItem, index: Int) -> CGRect? } extension MediaPreviewableViewController { func sourceFrame(transitionItem: MediaPreviewTransitionItem, index: Int) -> CGRect? { switch transitionItem.source { case .mosaic(let mosaicImageViewContainer): guard index < mosaicImageViewContainer.imageViews.count else { return nil } let imageView = mosaicImageViewContainer.imageViews[index] return imageView.superview?.convert(imageView.frame, to: nil) case .profileAvatar(let profileHeaderView): return profileHeaderView.avatarImageView.superview?.convert(profileHeaderView.avatarImageView.frame, to: nil) case .profileBanner: return nil // fallback to snapshot.frame } } }