mastodon-ios/Mastodon/Scene/Transition/MediaPreview/MediaPreviewTransitionItem....

74 lines
2.0 KiB
Swift

//
// MediaPreviewTransitionItem.swift
// Mastodon
//
// Created by MainasuK Cirno on 2021-4-28.
//
import UIKit
import CoreData
import MastodonUI
class MediaPreviewTransitionItem: Identifiable {
let id: UUID
let source: Source
var previewableViewController: MediaPreviewableViewController
// source
var image: UIImage?
var aspectRatio: CGSize?
var initialFrame: CGRect? = nil
var sourceImageView: UIImageView?
var sourceImageViewCornerRadius: CGFloat?
// target
var targetFrame: CGRect? = nil
// transitioning
var transitionView: UIView?
var snapshotRaw: UIView?
var snapshotTransitioning: UIView?
var touchOffset: CGVector = CGVector.zero
var interactiveTransitionMaskView: UIView?
var interactiveTransitionMaskLayer: CAShapeLayer?
init(
id: UUID = UUID(),
source: Source,
previewableViewController: MediaPreviewableViewController
) {
self.id = id
self.source = source
self.previewableViewController = previewableViewController
}
}
extension MediaPreviewTransitionItem {
enum Source {
case attachment(MediaView)
case attachments(MediaGridContainerView)
case profileAvatar(ProfileHeaderView)
case profileBanner(ProfileHeaderView)
func updateAppearance(position: UIViewAnimatingPosition, index: Int?) {
let alpha: CGFloat = position == .end ? 1 : 0
switch self {
case .attachment(let mediaView):
mediaView.alpha = alpha
case .attachments(let mediaGridContainerView):
if let index = index {
mediaGridContainerView.setAlpha(alpha, index: index)
} else {
mediaGridContainerView.setAlpha(alpha)
}
case .profileAvatar(let profileHeaderView):
profileHeaderView.avatarButton.alpha = alpha
case .profileBanner:
break // keep source
}
}
}
}