More gallery transition tweaks

This commit is contained in:
Shadowfacts 2024-11-25 18:43:35 -05:00
parent fa828a5eae
commit c716f03784
2 changed files with 5 additions and 42 deletions

View File

@ -84,46 +84,11 @@ class GalleryDismissAnimationController: NSObject, UIViewControllerAnimatedTrans
let content = itemViewController.takeContent() let content = itemViewController.takeContent()
content.view.translatesAutoresizingMaskIntoConstraints = true content.view.translatesAutoresizingMaskIntoConstraints = true
content.view.layer.masksToBounds = true
content.view.transform = .identity content.view.transform = .identity
content.view.layer.opacity = 1 content.view.layer.opacity = 1
content.view.frame = contentContainer.bounds content.view.frame = contentContainer.bounds
contentContainer.addSubview(content.view) contentContainer.addSubview(content.view)
let sourceAspectRatio: CGFloat = if sourceFrameInContainer.height > 0 {
sourceFrameInContainer.width / sourceFrameInContainer.height
} else {
0
}
let destAspectRatio: CGFloat = if destFrameInContainer.height > 0 {
destFrameInContainer.width / destFrameInContainer.height
} else {
0
}
let sourceSizeWithDestAspectRatioCenteredInContentContainer: CGRect
if 0.001 < abs(sourceAspectRatio - destAspectRatio) {
// asepct ratios are effectively equal
sourceSizeWithDestAspectRatioCenteredInContentContainer = CGRect(origin: .zero, size: sourceFrameInContainer.size)
} else if sourceAspectRatio < destAspectRatio {
// source aspect ratio is narrow/taller than dest
let width = sourceFrameInContainer.height * destAspectRatio
sourceSizeWithDestAspectRatioCenteredInContentContainer = CGRect(
x: -(width - sourceFrameInContainer.width) / 2,
y: 0,
width: width,
height: sourceFrameInContainer.height
)
} else {
// source aspect ratio is wider/shorter than dest
let height = sourceFrameInContainer.width / destAspectRatio
sourceSizeWithDestAspectRatioCenteredInContentContainer = CGRect(
x: 0,
y: -(height - sourceFrameInContainer.height) / 2,
width: sourceFrameInContainer.width,
height: height
)
}
container.layoutIfNeeded() container.layoutIfNeeded()
let duration = self.transitionDuration(using: transitionContext) let duration = self.transitionDuration(using: transitionContext)
@ -157,7 +122,8 @@ class GalleryDismissAnimationController: NSObject, UIViewControllerAnimatedTrans
} }
contentContainer.frame = sourceFrameInContainer contentContainer.frame = sourceFrameInContainer
content.view.frame = sourceSizeWithDestAspectRatioCenteredInContentContainer // Using sourceSizeWithDestAspectRatioCenteredInContentContainer does not seem to be necessary here.
// I guess autoresizing takes care of it?
itemViewController.setControlsVisible(false, animated: false, dueToUserInteraction: false) itemViewController.setControlsVisible(false, animated: false, dueToUserInteraction: false)
} }

View File

@ -31,7 +31,7 @@ class GalleryPresentationAnimationController: NSObject, UIViewControllerAnimated
} }
// Try to effectively "fade out" anything that's on top of the source view. // Try to effectively "fade out" anything that's on top of the source view.
// The 0.05 duration makes this happen faster than the rest of the animation, // The 0.1 duration makes this happen faster than the rest of the animation,
// and so less noticeable. // and so less noticeable.
let sourceSnapshot = sourceView.snapshotView(afterScreenUpdates: false) let sourceSnapshot = sourceView.snapshotView(afterScreenUpdates: false)
if let sourceSnapshot { if let sourceSnapshot {
@ -41,11 +41,8 @@ class GalleryPresentationAnimationController: NSObject, UIViewControllerAnimated
sourceSnapshot.frame = sourceFrameInShapshotContainer sourceSnapshot.frame = sourceFrameInShapshotContainer
sourceSnapshot.transform = sourceView.transform sourceSnapshot.transform = sourceView.transform
sourceSnapshot.layer.opacity = 0 sourceSnapshot.layer.opacity = 0
UIView.animate(withDuration: 0.05) { UIView.animate(withDuration: 0.1) {
sourceSnapshot.layer.opacity = 1 sourceSnapshot.layer.opacity = 1
// Also fade out the actual source view underneath the snapshot to try
// and account for semi-transparent images.
self.sourceView.layer.opacity = 0
} }
} }