I'm facing a big issue.. And I just don't know why it does not work correctly. I'm making a gallery application and want to have smooth transition between gallery and fullscreen image.
I though my animation worked perfectly.. but I captured a picture with different orientation and my animation doesn't work anymore. Do you have any idea why my animation is dependent to the orientation of the picture ?
here is my working animation.
Here is my broken animation
As you can see the height and the width are the same, and this is not a ratio problem.
here is my animation
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
guard let toView = transitionContext.view(forKey: .to),
let fromVC = transitionContext.viewController(forKey: .from)?.childViewControllers.first as? NavigationGalleryViewController,
let fromView = fromVC.collectionView?.cellForItem(at: indexPath) as? InstallationViewCell
else {
transitionContext.completeTransition(true)
return
}
let finalFrame = toView.frame
let viewToAnimate = UIImageView(frame: originFrame)
viewToAnimate.image = fromView.imageView.image
viewToAnimate.contentMode = .scaleAspectFill
viewToAnimate.clipsToBounds = true
fromView.imageView.isHidden = true
let containerView = transitionContext.containerView
containerView.addSubview(toView)
containerView.addSubview(viewToAnimate)
toView.isHidden = true
// Determine the final image height based on final frame width and image aspect ratio
let imageAspectRatio = viewToAnimate.image!.size.width / viewToAnimate.image!.size.height
var finalImageheight = finalFrame.width / imageAspectRatio
if (finalImageheight > UIScreen.main.bounds.height) {
finalImageheight = UIScreen.main.bounds.height
}
// Animate size and position
UIView.animate(withDuration: duration, animations: {
viewToAnimate.frame.size.width = finalFrame.width
viewToAnimate.frame.size.height = finalImageheight
viewToAnimate.center = CGPoint(x: finalFrame.midX, y: finalFrame.midY)
}, completion:{ _ in
toView.isHidden = false
fromView.imageView.isHidden = false
viewToAnimate.removeFromSuperview()
transitionContext.completeTransition(true)
})
}
All my frames are good in either of way, I checked them 4 times, my begin and ending frames are good.
Is there something I should know about pictures, orientation or animation ?