【发布时间】:2015-11-01 18:28:34
【问题描述】:
我正在 UIStoryboardSegue 中编写自定义转场。我使用 CATransition 创建从右到左的自定义动画。如果我使用sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false);,它不会带我进入第二个视图。它只是执行从右到左的动画并停留在第一个视图上。我调试了这段代码,发现 sourceViewController.navigationController 为 nil。我在第一个视图和第二个视图之间有一个 UINavigationController。
我也尝试将这行代码替换为sourceViewController.presentViewController(destinationViewController, animated: false, completion: nil);。过渡确实发生了,但是发生得太快了,我看不到从右到左的动画。
我在这个 UIStoryboardSegue 中的完整代码如下:
override func perform() {
let sourceViewController = self.sourceViewController as UIViewController;
let destinationViewController = self.destinationViewController as UIViewController;
let transition: CATransition = CATransition()
transition.duration = 0.25;
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
sourceViewController.view.layer.addAnimation(transition, forKey: "kCATransition")
sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false);
}
非常感谢您的帮助
【问题讨论】:
标签: uinavigationcontroller swift2 uistoryboardsegue pushviewcontroller presentviewcontroller