@ moni15,我試圖調試視圖層次結構之前,但沒有黑色的人工製品可見,當我打開視圖框架一切看起來很好。這看起來像一些渲染問題,或者可能是iOS錯誤?
這裏的代碼演示和Dimiss過渡:
class TransitionPresentationAnimator: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.3
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)!
let containerView = transitionContext.containerView
let animationDuration = self .transitionDuration(using: transitionContext)
toViewController.view.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
toViewController.view.layer.shadowColor = UIColor.black.cgColor
toViewController.view.layer.shadowOffset = CGSize(width: 0.0, height: 2.0)
toViewController.view.layer.shadowOpacity = 0.3
toViewController.view.layer.cornerRadius = 4.0
toViewController.view.clipsToBounds = true
containerView.addSubview(toViewController.view)
UIView.animate(withDuration: animationDuration, animations: {() -> Void in
toViewController.view.transform = CGAffineTransform.identity
}, completion: { (finished) -> Void in
transitionContext.completeTransition(finished)
})
}
}
class TransitionDismissAnimator : NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.3
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)!
let animationDuration = self .transitionDuration(using: transitionContext)
UIView.animate(withDuration: animationDuration, animations: {() -> Void in
fromViewController.view.alpha = 0.0
fromViewController.view.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
}) { (finished) -> Void in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
}
}
解決!問題出在TransitionPresentationAnimator類中,而CGAffineTransform出錯了。現在我不再使用它了。我貼我的代碼,如果任何人都會有類似的問題:
class TransitionPresentationAnimator: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.3
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
to = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)!
from = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)!
let container = transitionContext.containerView
container.addSubview(to.view)
to.view.bounds.origin = CGPoint(x: 0, y: -from.view.bounds.size.height)
UIView.animate(withDuration: 0.6, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0, options: [.curveEaseOut], animations: {
self.to.view.bounds = self.from.view.bounds
}) { (completed) in
transitionContext.completeTransition(completed)
}
}
}
嘗試設置一個破發點中的密切FUNC和檢查幀(如果你不熟悉的圖標通過去菜單調試>查看調試>捕獲視圖層次結構)。查看哪個視圖變黑。如果這沒有幫助,請發佈您的視圖控制器的演示和解僱流程。 – moni15