Fix settings -> media gallery transition when missing image

This commit is contained in:
Pete Walters 2026-05-29 17:20:30 -05:00 committed by GitHub
parent e80b3d8bdb
commit 0d76c69ec1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -112,23 +112,6 @@ extension MediaDismissAnimationController: UIViewControllerAnimatedTransitioning
let toMediaContext = toContextProvider.mediaPresentationContext(item: item, in: containerView)
guard let presentationImage = item.image else {
owsFailDebug("presentationImage was unexpectedly nil")
// Complete transition immediately.
fromContextProvider.mediaWillPresent(fromContext: fromMediaContext)
if let toMediaContext {
toContextProvider.mediaWillPresent(toContext: toMediaContext)
}
DispatchQueue.main.async {
fromContextProvider.mediaDidPresent(fromContext: fromMediaContext)
if let toMediaContext {
toContextProvider.mediaDidPresent(toContext: toMediaContext)
}
transitionContext.completeTransition(true)
}
return
}
// All is good, set up the view hierarchy and view animations.
let isTransitionInteractive = transitionContext.isInteractive
@ -160,13 +143,19 @@ extension MediaDismissAnimationController: UIViewControllerAnimatedTransitioning
clippingView.addSubview(transitionView)
self.transitionView = transitionView
let imageView = MediaTransitionImageView(image: presentationImage)
imageView.contentMode = .scaleAspectFill
imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
imageView.layer.masksToBounds = true
imageView.shape = fromMediaContext.mediaViewShape
imageView.frame = transitionView.bounds
transitionView.addSubview(imageView)
let transitionImageView: MediaTransitionImageView?
if let presentationImage = item.image {
let imageView = MediaTransitionImageView(image: presentationImage)
imageView.contentMode = .scaleAspectFill
imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
imageView.layer.masksToBounds = true
imageView.shape = fromMediaContext.mediaViewShape
imageView.frame = transitionView.bounds
transitionView.addSubview(imageView)
transitionImageView = imageView
} else {
transitionImageView = nil
}
// Because toggling `isHidden` causes UIStack view layouts to change, we instead toggle `alpha`
fromMediaContext.mediaView.alpha = 0
@ -209,7 +198,7 @@ extension MediaDismissAnimationController: UIViewControllerAnimatedTransitioning
}
}
imageView.shape = destinationMediaViewShape
transitionImageView?.shape = destinationMediaViewShape
transitionView.transform = .identity
transitionView.frame = clippingView.convert(destinationFrame, from: containerView)
transitionView.layer.shadowOpacity = 0