[英]UIViewControllerAnimatedTransitioning shows a black screen when animating to and from view
我正在嘗試為我的視圖控制器創建一個easeInEaseOut animation,但是,當我嘗試為“to”和“from”視圖設置動畫時,“from”視圖會變黑,直到 animation 完成。 如果我只為“到”視圖設置動畫,那么新視圖 controller 可以正確設置動畫,但在“從”視圖的頂部。 我希望這兩個觀點一起移動,給人一種印象,即第一個正在滑落,為第二個讓路(我想被第二個推開更准確)。 誰能告訴我為什么會這樣? 我嘗試過多種設置,請參見下面的代碼:
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
guard let toVC = transitionContext.viewController(forKey: .to), let fromVC = transitionContext.viewController(forKey: .from) else {
dLog("No to or from VC")
transitionContext.completeTransition(false)
return
}
switch animationType {
case .present:
dLog("Present VC")
transitionContext.containerView.addSubview(fromVC.view)
transitionContext.containerView.addSubview(toVC.view)
presentAnimation(with: transitionContext, fromView: fromVC.view, toView: toVC.view)
case .dismiss:
dLog("Dismiss VC")
}
}
func presentAnimation(with transitionContext: UIViewControllerContextTransitioning, fromView: UIView, toView: UIView) {
fromView.clipsToBounds = true
toView.clipsToBounds = true
fromView.transform = CGAffineTransform(translationX: 0, y: 0)
toView.transform = CGAffineTransform(translationX: toView.frame.size.width, y: 0)
let duration = transitionDuration(using: transitionContext)
UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.0, initialSpringVelocity: 0.0, options: .curveEaseInOut, animations: {
toView.transform = CGAffineTransform(translationX: 0.0, y: 0.0)
fromView.transform = CGAffineTransform(translationX: -fromView.frame.size.width, y: 0)
}) { _ in
transitionContext.completeTransition(true)
}
}
如果其他人為此苦苦掙扎,我想通了。 您必須改用 animateKeyFrames :
UIView.animateKeyframes(withDuration: duration, delay: 0.0, options: .calculationModeLinear, animations: {
UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 2.0) {
toView.transform = CGAffineTransform(translationX: 0, y: 0)
}
UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 2.0) {
fromView.transform = CGAffineTransform(translationX: -fromView.frame.size.width, y: 0)
}
}) { _ in
transitionContext.completeTransition(true)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.