iPhone 模态翻转过渡时,为什么会出现主屏幕呢?

9
在某些情况下(并非每次),当我的应用程序使用 presentModalViewController:animated: 并将 modalTransitionStyle 设置为 UIModalTransitionStyleFlipHorizontal 展示模态视图控制器时,iPhone 主屏幕会显示在动画背景中。大多数情况下,背景是预期的黑色。我设置了 windowrootViewController(一个 UITabBarController),并没有发现任何异常情况。尽管我已经将应用程序用户界面变为黑色,但您可以在使用 iPhone 4 拍摄该过渡期间拍摄的屏幕截图中看到此问题。

这是什么原因?即使我想要这种行为,我也不知道如何做。

编辑:这个屏幕截图是由测试人员发送给我的,我自己没有重现过。他们告诉我它发生在特定应用程序会话期间,并且一旦发生,所有转换都会出现此问题。当他们退出/重新启动应用程序后,它就不再发生了,并且他们从那以后再也没有看到它。我想知道是否有必要关注它(即我是否可以在代码中防止它发生)。

编辑2:此应用程序不使用 IB。所有控制器/视图都是通过代码创建的。


这很奇怪,听起来有点像一个 bug。如果你无法重现它,那就不太理想。你是否在任何时候设置了 UIWindow 的背景颜色?也许明确设置一下可能会避免这种情况,但这只是纯粹的猜测。 - Paul.s
我没有设置窗口的 backgroundColor(或任何其他显示属性)。我尝试通过将窗口背景颜色明确设置为 clearColor(并且混淆了 tabBarController.view 等)来重现它。如果我能强制发生这种情况,那可能会给我一些见解,但我还没有找到方法。 - XJones
是的,这就是我的想法。尽管新的苹果模板倾向于明确设置窗口 self.window.backgroundColor = [UIColor whiteColor];,但我可能错了,但很有可能在xcode 4.x之前的xib中也存在类似的情况。 - Paul.s
我知道,感谢您的输入。我澄清了这一点,以防它激发任何其他人在使用IB和编程创建窗口/视图之间差异方面产生创意的想法。现在,我还明确设置了窗口背景颜色。仍然很希望能够更多地了解这是如何发生的并能够强制执行它。 - XJones
那个测试人员的设备越狱了吗? - MattyG
显示剩余2条评论
5个回答

3

我之前也遇到过同样的问题。尝试在您推送的视图上使用[viewController.view setBackgroundColor:[UIColor blackColor]];。反正对我有用!


谢谢,我现在正在这样做,但你可能没有在评论中看到。目前没有更多的复现。除了随机(即有缺陷的)事件之外,知道如何明确地使它发生会很好。 - XJones
是的,我觉得这可能只是一个随机事件。我只在iPad上连续几次成功了,祝编程愉快! - Chad
我不确定这是否真的相关,但我确实进行了此更改,据我所知,这从未再次发生过。我仍然从未亲眼见过它。我会接受这个来结束它。 - XJones

2
当iOS向应用程序发送内存警告并且应用程序的框架自动卸载所有不可见的视图组件时,此问题会发生,除了与viewController相关的数据结构之外。当引用视图时,它将从nib中重新加载视图(在您的情况下,我猜测是调用loadView方法)。您应确保您的视图构造代码可以重建,并在您的视图控制器的viewDidUnload方法中将与视图组件相关的所有对象设置为null。
您还可以通过在模拟器上运行您的应用程序并且在该模态视图中触发“设备”菜单上的“内存警告”模拟来使其发生。

这不是问题的原因。关于iOS(iOS 6之前)如何响应内存警告卸载视图,您是正确的,但这不是问题所在。 - XJones

0

解决此问题的说明:

  1. 进入受影响的 XIB 并选择受影响的视图控制器。
  2. 转到右侧的属性面板。 转到“View” >> “Background colour”。
  3. 现在设置您想要的过渡背景颜色。

希望这可以帮助您 :)


0

我不确定,但我认为这可能是由于主要的“UIApplication.h”代码中的错误或修改,iOS的问题或您所拥有的Xcode版本的问题引起的。

Seb


0

我发现这个问题甚至在Facebook iPhone应用程序中也会出现。也许这是苹果的一个bug。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接