【问题标题】:Transition animation from one view controller to another view controller将动画从一个视图控制器过渡到另一个视图控制器
【发布时间】:2019-05-26 21:26:16
【问题描述】:
我有 2 个带有导航控制器的视图控制器。我将一个 firstViewController 推到 secondViewController。我目前正在使用
[self.navigationController pushViewController:detailsViewController animated:YES];
但是转场是从右边进来的secondView。我想做的是 secondView 从后面进来,而 firstView 淡出,而 secondView 淡入。
有没有办法做到这一点?
【问题讨论】:
标签:
ios
objective-c
uiviewcontroller
uiviewanimationtransition
【解决方案1】:
在 Swift 中推送/弹出 UIVIewController FadeIn/FadeOut
class FadeInPushSegue: UIStoryboardSegue {
var animated: Bool = true
override func perform() {
if var sourceViewController = self.sourceViewController as? UIViewController, var destinationViewController = self.destinationViewController as? UIViewController {
var transition: CATransition = CATransition()
transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
sourceViewController.view.window?.layer.addAnimation(transition, forKey: "kCATransition")
sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false)
}
}
}
class FadeOutPopSegue: UIStoryboardSegue {
override func perform() {
if var sourceViewController = self.sourceViewController as? UIViewController, var destinationViewController = self.destinationViewController as? UIViewController {
var transition: CATransition = CATransition()
transition.duration = 0.4
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
sourceViewController.view.window?.layer.addAnimation(transition, forKey: "kCATransition")
sourceViewController.navigationController?.popViewControllerAnimated(false)
}
}
}