【问题标题】:Modal ViewController popping up without animation, bug?模态视图控制器弹出没有动画,错误?
【发布时间】:2013-05-16 12:38:29
【问题描述】:

有时当我使用:[self presentViewController:viewController animated:YES completion:nil]; 或者即使模态转场处理了过渡,它只是弹出而没有任何过渡,使它看起来很难看。虽然很少见,但当这种情况发生时,每一个模态 VC 都会做同样的事情,不管它在哪里/如何被调用。当我重新启动应用程序时,问题就出现了,仅此而已,一段时间内不会再次发生。奇怪的是,在解雇 VC 时会有一个过渡。这是一个错误吗?

感谢您的帮助,
问候,
迈克

更新:我想我找到了原因。当我像这样展示我的教程视图时,这个错误会影响大多数模态 VC 和所有 Segue 模态 VC:

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    TutorialViewController *tutPopUp = [[TutorialViewController alloc] init];
    self.tabBarController.modalPresentationStyle = UIModalPresentationCurrentContext;
    [self presentModalViewController:tutPopUp animated:NO];

我认为问题在于self.tabBarController.modalPresentationStyle = UIModalPresentationCurrentContext;,它会影响整个标签栏。加载此特定 VC 后,我可以设置的默认值是多少?

回答:在阅读了一些 Apple Docs 之后,我发现默认的 modalPresentationStyleUIModalPresentationFullScreen,所以在使用另一种presentationStyle 后将其设置为,修复它。

【问题讨论】:

    标签: iphone ios objective-c


    【解决方案1】:

    如果您在设备上遇到这种情况,我会认为正在执行一些密集的 CPU 任务,这会导致主线程上的阻塞和卡顿。如果它在模拟器上,那您的 Mac 可能会在那个时候负担过重。

    你说的一件事让我对你的内存管理感到好奇。你说如果你退出应用程序,问题就会消失一段时间。让我觉得你有影响性能的内存泄漏。你在使用 ARC 吗?

    因为您明确要求动画,所以没有理由在 UIKit 级别上显示没有它。

    【讨论】:

    • 您好,感谢您的回答。是的,我正在使用 ARC。至于CPU超载,绝对不是那种感觉。虽然我做了一些计算,但它们是最小的,并且在我按下按钮和 VC 弹出之间存在 0 延迟,我认为如果 CPU 过载就不会出现这种情况。该应用程序的响应速度也非常快,而且我经常可以使用该应用程序很长时间而不会遇到错误。
    • 您好,请查看我对原始帖子的编辑。认为我已经发现了问题,只是对修复有点不确定。
    • 酷,很高兴你找到它。在您发布的代码中,动画参数设置为 NO,这是一个错字,还是以某种方式改变了您应用程序其余部分的presentationCurrentContext?
    • 我不认为设置参数会有所不同,因为UIModalPresentationCurrentContext 没有动画(这就是我使用它的原因,所以我可以在视图上创建自己的自定义动画)。整个应用程序停止显示模态转换的原因是因为任何属于我的 TabBarController 层次结构的模态 VC 都将其 modalPresentationStyle 设置为 UIModalPresentationCurrentContext(如果有意义的话)。这要归功于这行代码:self.tabBarController.modalPresentationStyle = UIModalPresentationCurrentContext;
    • 酷,在这种情况下,您应该标记自己的答案。感谢投票:-)
    【解决方案2】:

    问题在于我曾经在我的应用程序的其他地方显示另一个 VC 的一些代码:

        [tableView deselectRowAtIndexPath:indexPath animated:NO];
        TutorialViewController *tutPopUp = [[TutorialViewController alloc] init];
        self.tabBarController.modalPresentationStyle = UIModalPresentationCurrentContext;
        [self presentModalViewController:tutPopUp animated:NO];
    

    问题出在此处:self.tabBarController.modalPresentationStyle = UIModalPresentationCurrentContext;,因为这会影响我的应用程序中的整个标签栏,并将演示样式更改为没有动画的样式。我发现默认的modalPresentationStyleUIModalPresentationFullScreen,所以在使用另一种presentationStyle 后将其设置为,解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多