在 UIViewController (iOS) 中重新启动绘图和事件
Posted
技术标签:
【中文标题】在 UIViewController (iOS) 中重新启动绘图和事件【英文标题】:Restart drawing and events in UIViewController (iOS) 【发布时间】:2011-06-11 15:18:41 【问题描述】:简化问题:有什么方法可以重新启动应用程序的 navigationController? 我正在尝试强制应用程序恢复其初始外观。
详细解释
我在 ios 中有一个宠物项目,我想解决一个奇怪的界面问题。我还想了解这种行为背后的机制。
我有一个简单的欢迎视图,它显示了应用程序的启动屏幕。之后,线程进入休眠状态 1.5 秒。
[NSThread sleepForTimeInterval: 1.5];
然后,我正在展示一个广告视图:
AdController *ad = [[AdController alloc] initWithNibName:nil bundle:nil];
[self.navigationController presentModalViewController: ad animated:YES];
[ad release];
这就是背后的所有逻辑。之后,其他控制器被无事件地推动。我想实现这一点,如果用户在任何时候让应用程序进入后台(按下 iPhone/iPad 按钮),那么所有控制器都必须通过 pop 从堆栈中消失。为了得到它,我正在使用委托的 applicationDidBecomeActive 事件。代码如下:
[self.navigationController dismissModalViewControllerAnimated:NO];
[self.navigationController popToRootViewControllerAnimated:YES];
这会导致一些奇怪的视觉行为。根据用户选择按下按钮的时刻,到第一个视图的转换是可见的。在其他情况下,广告视图仍然存在,因此它会被关闭,然后出现启动屏幕。
如果有某种方法可以重置第一个控制器(启动画面),这将是很棒的,以便让所有转换都像第一次一样工作。我想过从导航控制器中弹出它并重新加载另一个,再次分配,但这似乎有点复杂。
有什么简单的方法可以实现吗?
重要编辑:如果用户反复强制应用程序进入后台,则会引发以下异常:
嵌套弹出动画可能导致导航栏损坏 在意外状态下完成导航转换。导航栏子视图树可能已损坏。
【问题讨论】:
尝试使用 no 动画的 popToRootViewControllerAnimated 感谢 phix23,但我之前尝试过。没办法,两个异常都出现了。 【参考方案1】:我发现的最简单的方法是在 plist 文件中添加一个新行,其键为“应用程序不在后台运行”,值为 YES。
当用户按下按钮时,强制应用程序完全关闭并从内存中卸载。
【讨论】:
以上是关于在 UIViewController (iOS) 中重新启动绘图和事件的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 在 UINavigationController 中将 UIViewController 显示为全屏
在 iOS8 中未调用 UIViewController 设备旋转委托方法
IOS。如何在每个 UIViewController 上启用和禁用旋转?
在 iOS 11 中,UIViewController 的 transitionFromViewController 从不调用它的完成块