UITransitionContextFromViewControllerKey返回nil

时间:2016-03-11 17:19:39

标签: swift uiviewanimationtransition

所以,我正在使用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)!

1 个答案:

答案 0 :(得分:1)

根据ElasticTransition Github page,如果视图控制器以弹性过渡方式显示为 模态 ,则目标视图控制器的transitioningDelegate需要为设置为ElasticTransitionmodalPresentationStyle设置为.Custom。但是,如果使用弹性过渡将视图控制器推送到导航控制器堆栈,则只需将navigationController?.delegate设置为ElasticTransition

经过一番聊天,@哈里什告诉我,他使用推送segue。但是,prepareForSegue中的代码是当一个人以模态方式呈现视图控制器时的设置代码。这可能是UITransitionContextFromViewControllerKey返回nil的原因。因此,我认为解决方案是将navigationController的{​​{1}}设置为delegate,并删除ElasticTransition中的代码。