gpt4 book ai didi

ios - 在项目中使用 WYPopover 时 UINavigationControllerDelegate 方法调用崩溃

转载 作者:行者123 更新时间:2023-11-28 07:06:29 25 4
gpt4 key购买 nike

我正在开发一个包含 WYPopoverController 的应用程序,它在应有的地方工作得很好。我想在两个 Controller 之间添加自定义动画,而不是内置 push/pop。

在包含 FROM 和 TO Controller 的导航 Controller 中,我不做任何与 WYPopoverController 相关的事情,在 FROM 和 TO Controller 中也不做。

我已经实现了导航 Controller 委托(delegate),它非常简单并且是处理实际动画的动画师类。

public class NavigationControllerDelegate: NSObject, UINavigationControllerDelegate {

let animator = Animator()

public func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {

if operation == UINavigationControllerOperation.Pop {
return self.animator
}

return nil
}
}

动画师类:

class Animator: NSObject, UIViewControllerAnimatedTransitioning {

public func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval {
return 0.33
}

public func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let toVC = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!
let fromVC = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!

transitionContext.containerView().addSubview(toVC.view)
toVC.view.alpha = 0

UIView.animateWithDuration(self.transitionDuration(transitionContext), animations: { () -> Void in
fromVC.view.transform = CGAffineTransformMakeScale(0.1, 0.1)
toVC.view.alpha = 1
}) { (finished) -> Void in
fromVC.view.transform = CGAffineTransformIdentity
transitionContext.completeTransition(!transitionContext.transitionWasCancelled())
}
}
}

在 FROM Controller 中我初始化导航委托(delegate)

override public func viewDidLoad() {
super.viewDidLoad()
// ... some other code here
self.navigationController?.delegate = NavigationControllerDelegate()
}

一切都会编译并运行,直到我点击(收集)单元格并想移至 TO Controller 为止。那时应用程序崩溃并出现错误: -[CALayer navigationController:animationControllerForOperation:fromViewController:toViewController:]: 无法识别的选择器发送到实例 0x7fc72e53e970

我添加了一个断点,我最终进入了 UINavigationController 的 sizzled_pushViewController:animated: 方法。老实说,我不知道如何处理这个问题。

screen shot 2015-05-21 at 15 48 04

最佳答案

事实证明,解决方案与 WYPopoverController 无关。显然,从其根 Controller 中设置导航 Controller 委托(delegate)不是它应该完成的方式。我设法重构了我的代码以摆脱上述库,但它仍然因同样的异常而崩溃。

-[CALayer navigationController:animationControllerForOperation:fromViewController:toViewController:]: 无法识别的选择器发送到实例 0x7fc72e53e970

那时我真的很困惑。经过更多的挖掘和拉头发,我得到了可行的解决方案。 我在 Storyboard中初始化了导航 Controller 委托(delegate),所有部分都放在了正确的位置。

关于ios - 在项目中使用 WYPopover 时 UINavigationControllerDelegate 方法调用崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30390524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com