【发布时间】:2019-02-09 07:57:33
【问题描述】:
我正在做一个自定义转换,如果在呈现动画之后,设备将被旋转,然后destinationVC 将被关闭,originVC 转换不正确(不完成屏幕)。如果没有设备旋转,一切正常。有没有人可以帮帮我?
这是我展示和关闭动画的代码:
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
guard let originViewController = transitionContext.viewController(forKey: .from),
let destinationViewController = transitionContext.viewController(forKey: .to) else { return }
destinationViewController.view.transform = CGAffineTransform(translationX: 0, y: destinationViewController.view.frame.height)
let duration = transitionDuration(using: transitionContext)
UIView.animate(withDuration: duration, animations: {
destinationViewController.view.transform = CGAffineTransform(translationX: 0, y: 0)
originViewController.view.transform = originViewController.view.transform.scaledBy(x: 0.95, y: 0.95)
originViewController.view.layer.cornerRadius = 8.0
}, completion: { completed in
transitionContext.completeTransition(completed)
})
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
guard let originViewController = transitionContext.viewController(forKey: .from),
let destinationViewController = transitionContext.viewController(forKey: .to) else { return }
let duration = transitionDuration(using: transitionContext)
UIView.animate(withDuration: duration, animations: {
originViewController.view.transform = CGAffineTransform(translationX: 0, y: destinationViewController.view.frame.height)
destinationViewController.view.transform = CGAffineTransform.identity
destinationViewController.view.layer.cornerRadius = 0.0
}, completion: { completed in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
})
}
编辑:
当我添加 destinationViewController.view.frame = transitionContext.finalFrame(for: destinationViewController) 以关闭动画时,一切似乎都正常,但我不知道这是否正确
【问题讨论】:
-
我用
UIViewControllerTransitioningDelegate扩展了我的SecondViewController并实现:animationController(forPresented...和animationController(forDismissed dismissed:...
标签: ios swift uikit cgaffinetransform cgaffinetransformscale