如果我只是调用push方法:
[self.navigationController pushViewController:viewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
然后它使用推动画.如何更改它以使用交叉溶解动画,就像我可以使用模态segue?
mic*_*els 21
您可以使用此答案中CATransition演示的:
CATransition* transition = [CATransition animation];
transition.duration = 0.5;
transition.type = kCATransitionFade;
[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController pushViewController:viewController animated:NO];
Run Code Online (Sandbox Code Playgroud)
Jan*_*orf 12
我使用扩展名来轻松重用:
extension UINavigationController {
func fadeTo(_ viewController: UIViewController) {
let transition: CATransition = CATransition()
transition.duration = 0.3
transition.type = kCATransitionFade
view.layer.add(transition, forKey: nil)
pushViewController(viewController, animated: false)
}
}
Run Code Online (Sandbox Code Playgroud)
注意动画是如何虚假的; 当您将其设置为true时,您仍会看到标准的"推送"动画(从右到左).
UINavigationControllerDelegate协议有一个方法可以返回一个自定义的UIViewControllerAnimatedTransitioning对象,该对象将控制转换中涉及的两个视图控制器之间的动画.
创建一个Animator类来控制交叉溶解过渡:
class Animator: NSObject, UIViewControllerAnimatedTransitioning {
let animationDuration = 0.25
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return animationDuration
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let toVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)
toVC?.view.alpha = 0.0
let fromVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)
transitionContext.containerView.addSubview(fromVC!.view)
transitionContext.containerView.addSubview(toVC!.view)
UIView.animate(withDuration: animationDuration, animations: {
toVC?.view.alpha = 1.0
}) { (completed) in
fromVC?.view.removeFromSuperview()
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在您的UINavigationControllerDelegate中提供它:
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return Animator()
}
Run Code Online (Sandbox Code Playgroud)
这是一个更深入的教程:http://blog.rinatkhanov.me/ios/transitions.html
SWIFT 3,4.2-截至2019年10月
let transition = CATransition()
transition.duration = 0.5
transition.type = kCATransitionFade
self.navigationController?.view.layer.add(transition, forKey:nil)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11161 次 |
| 最近记录: |