推送的自定义过渡和流行的标准过渡

Posted

技术标签:

【中文标题】推送的自定义过渡和流行的标准过渡【英文标题】:Custom transition for push and standard transition for pop 【发布时间】:2014-07-06 19:04:06 【问题描述】:

我有一个视图控制器,它在点击表格单元格时具有自定义推送转换,并在点击后栏按钮项时执行标准弹出转换。问题是当我尝试从前一个控制器转到同一个视图控制器时,应用程序崩溃了。下面是我正在实现的UINavigationControllerDelegatefunction:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC

    return (operation == UINavigationControllerOperationPush ? animator : nil);

感谢任何线索!

提前致谢。

【问题讨论】:

您的应用程序是如何崩溃的?哪条线?堆栈跟踪?留言? 它在 int main 处崩溃。没有消息,我不知道要显示什么堆栈跟踪。 我认为它在- [UINavigationController _customTransitionController:] 崩溃。早于objc_msgSend 在执行自定义转换后,您需要将导航控制器的委托设置回 nil 或其他委托。这使弹出动画回到了它的标准,如果你返回到 tableview 的控制器,你应该再次要求成为它的代表。如果该 tableview 控制器也作为弹出,那么您还需要在弹出之前放开导航控制器的委托,因为这也调用了您的自定义委托。 我把 self.navigationController.delegate = nil;在 willMoveToParentViewController 中并为我修复了它。我在 UINavigationController customTransitionController 遇到了同样的崩溃。 【参考方案1】:

我遇到了一个问题,NavigationController 的委托被设置为已被释放的视图控制器,这导致[UINavigationController _customTransitionController:] 崩溃。

尤其是在使用 unwind segues 时,似乎任何中间视图控制器在被释放之前都不会收到 viewWillDisappear 回调。这里的补救措施是在目标展开视图控制器中实现以下内容:

-(IBAction)unwindSegue:(UIStoryboardSegue*)segue
    self.navigationController.delegate = nil;

【讨论】:

以上是关于推送的自定义过渡和流行的标准过渡的主要内容,如果未能解决你的问题,请参考以下文章

没有segue的自定义关闭过渡

iOS 自定义弹出过渡 - 就像在 snapchat 故事上向下滑动

animationControllerForPresentedController 和 animateTransition 之间的自定义过渡动画未知延迟

UINavigationController 的自定义动画推送未正确呈现导航栏

带有旋转的自定义 UIViewController 过渡

如何将动画添加到由 AnyView 制作的自定义导航项之间的过渡?