所以,我正在使用Elastic Transition pod(Cocoapods),当我转换我的应用时崩溃,因为UITransitionContextFromViewControllerKey
键是nil
。我真的很困惑为什么这个值会是nil
。解决此错误的可能原因和解决方案有哪些?
所以这里是我转换到下一个视图控制器时的一些代码:
func handleTap(sender: AnyObject) {
transition.sticky = true
transition.transformType = .TranslateMid
transition.showShadow = true
transition.edge = .Left
transition.startingPoint = sender.center
performSegueWithIdentifier("mySegue", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
segue.destinationViewController.transitioningDelegate = transition
segue.destinationViewController.modalPresentationStyle = .Custom
}
然后,当它试图转换我的应用程序崩溃抱怨这行代码(在弹性过渡中)返回nil
:
transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!
答案 0 :(得分:1)
根据ElasticTransition Github page,如果视图控制器以弹性过渡方式显示为 模态 ,则目标视图控制器的transitioningDelegate
需要为设置为ElasticTransition
,modalPresentationStyle
设置为.Custom
。但是,如果使用弹性过渡将视图控制器推送到导航控制器堆栈,则只需将navigationController?.delegate
设置为ElasticTransition
。
经过一番聊天,@哈里什告诉我,他使用推送segue。但是,prepareForSegue
中的代码是当一个人以模态方式呈现视图控制器时的设置代码。这可能是UITransitionContextFromViewControllerKey
返回nil的原因。因此,我认为解决方案是将navigationController
的{{1}}设置为delegate
,并删除ElasticTransition
中的代码。