0

有时当我使用:[self presentViewController:viewController animated:YES completion:nil];或者即使模态 segue 处理了过渡,它只是弹出而没有任何过渡,使它看起来很难看。虽然很少见,但当这种情况发生时,每一个模态 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这样设置的,因此在使用另一个演示样式后,修复了它。

4

2 回答 2

1

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

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

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

于 2013-05-16T12:42:26.853 回答
1

问题出在我用来在我的应用程序的其他地方显示另一个 VC 的一些代码中:

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

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

于 2013-05-16T13:48:56.797 回答