【发布时间】:2018-01-26 15:40:29
【问题描述】:
我面临一个大问题。我只是不知道为什么它不能正常工作。 我正在制作一个图库应用程序,并希望在图库和全屏图像之间平滑过渡。
虽然我的动画效果很好……但是我拍摄了一张不同方向的图片,我的动画不再起作用了。 你知道为什么我的动画依赖于图片的方向吗?
这是我的工作动画。
这是我损坏的动画
如你所见,高度和宽度是一样的,这不是比例问题。
这是我的动画
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)
})
}
我所有的帧都很好,我检查了 4 次,我的开始帧和结束帧都很好。
关于图片、方向或动画有什么我应该知道的吗?
【问题讨论】:
-
您是否检查了 viewToAnimate.frame 是否不是集合单元本身的相对框架?因为那样有一个 214 的 X 就会超出范围。工作动画的frame参数是什么,originFrame的值是多少?
-
尝试设置
viewToAnimate.frame = fromView.superview!.convert(fromView.frame, to: transitionContext.containerView) -
你如何在这个语句中设置
originFramelet viewToAnimate = UIImageView(frame: originFrame)?