NavigationController.pushViewController 在 Custom Segue 中不起作用 - Swift 2.0 - iOS 9.1
NavigationController.pushViewController in Custom Segue does not work - Swift 2.0 - iOS 9.1
我正在 UIStoryboardSegue 中编写自定义转场。我使用 CATransition 创建从右到左的自定义动画。如果我使用 sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false);
,它不会将我带到第二个视图。它只是执行从右到左的动画并停留在第一个视图上。我已经调试了这段代码,我发现 sourceViewController.navigationController 是零。我在第一个视图和第二个视图之间有一个 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);
}
非常感谢您的帮助
使用sourceViewController.pushViewController
是正确的。 sourceViewController.navigationController
我得到 nil 的原因是,我将导航控制器放在第一个视图和第二个视图之间。正确的导航控制器放置方式是放在第一个视图之前。
我遇到了类似的问题。我的问题是:
sourceViewController.navigationController == nil
在 SourceViewController 的故事板文件中,单击 ViewController,然后:
Editor > Embed in > Navigation controller
然后 Xcode 生成了三个 ViewController:一个初始 NavigationController,然后是 SourceViewController 和 DestinationViewController。
现在自定义转场开始工作了。
如果这对您有帮助,请告诉我:-)
我正在 UIStoryboardSegue 中编写自定义转场。我使用 CATransition 创建从右到左的自定义动画。如果我使用 sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false);
,它不会将我带到第二个视图。它只是执行从右到左的动画并停留在第一个视图上。我已经调试了这段代码,我发现 sourceViewController.navigationController 是零。我在第一个视图和第二个视图之间有一个 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);
}
非常感谢您的帮助
使用sourceViewController.pushViewController
是正确的。 sourceViewController.navigationController
我得到 nil 的原因是,我将导航控制器放在第一个视图和第二个视图之间。正确的导航控制器放置方式是放在第一个视图之前。
我遇到了类似的问题。我的问题是:
sourceViewController.navigationController == nil
在 SourceViewController 的故事板文件中,单击 ViewController,然后:
Editor > Embed in > Navigation controller
然后 Xcode 生成了三个 ViewController:一个初始 NavigationController,然后是 SourceViewController 和 DestinationViewController。
现在自定义转场开始工作了。
如果这对您有帮助,请告诉我:-)