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 ?
1 Answers
Answers 1
UIImage orientations is one big messy bug. The easiest way is to normalize all UIImage instances in imageViews to one orientation. How it's done if well described in this answer
0 comments:
Post a Comment