我正在UIStoryboardSegue中编写自定义segue。我使用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);
}
非常感谢您的帮助
使用sourceViewController.pushViewController
是正确的。之所以没用,sourceViewController.navigationController
是因为我将导航控制器放置在第一个视图和第二个视图之间。放置导航控制器的正确方法是将其放置在第一个视图之前。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句