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

67 lines
1.9 KiB
Swift
Raw Normal View History

//
// MediaPreviewTransitionItem.swift
// Mastodon
//
// Created by MainasuK Cirno on 2021-4-28.
//
import UIKit
import CoreData
class MediaPreviewTransitionItem: Identifiable {
let id: UUID
let source: Source
var previewableViewController: MediaPreviewableViewController
// source
// value maybe invalid when preview paging
var image: UIImage?
var aspectRatio: CGSize?
var initialFrame: CGRect? = nil
var sourceImageView: UIImageView?
2021-04-28 14:10:17 +02:00
var sourceImageViewCornerRadius: CGFloat?
// target
var targetFrame: CGRect? = nil
// transitioning
var imageView: UIImageView?
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 mosaic(MosaicImageViewContainer)
2021-04-28 14:10:17 +02:00
case profileAvatar(ProfileHeaderView)
2021-04-28 14:36:10 +02:00
case profileBanner(ProfileHeaderView)
2021-04-28 14:10:17 +02:00
func updateAppearance(position: UIViewAnimatingPosition, index: Int?) {
let alpha: CGFloat = position == .end ? 1 : 0
switch self {
case .mosaic(let mosaicImageViewContainer):
if let index = index {
mosaicImageViewContainer.setImageView(alpha: 0, index: index)
} else {
mosaicImageViewContainer.setImageViews(alpha: alpha)
}
case .profileAvatar(let profileHeaderView):
profileHeaderView.avatarImageView.alpha = alpha
2021-04-28 14:36:10 +02:00
case .profileBanner:
break // keep source
2021-04-28 14:10:17 +02:00
}
}
}
}