iOS5 自定义窗口旋转问题

Posted

技术标签:

【中文标题】iOS5 自定义窗口旋转问题【英文标题】:iOS5 Custom Window rotation issue 【发布时间】:2012-11-01 18:38:30 【问题描述】:

所以我正在我的 ios 应用程序中创建并显示一个自定义窗口,因为我正在编写一个动态警报视图,它的功能也类似于咆哮/吐司警报。它在 ios6 中运行得非常好(希望我可以开源这个宝贝,你们都可以看看)

但无论如何,当我在 ios5 中运行它时,我的警报所在的窗口似乎并没有随着设备/模拟器旋转。无论如何,我的自定义窗口都保持纵向模式。

UIWindow 只是一个 UIView 子类,所以没有很好的“shouldRotate”委托方法。

我有点困惑为什么在 ios5 而不是 6 中发生这种情况。任何帮助将不胜感激^_^

【问题讨论】:

【参考方案1】:

我的窗口有一个 rootviewcontroller,我完全忘记了。我只需要实现

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
    return YES;

让它工作。

:-D

【讨论】:

【参考方案2】:

通常不建议两个在一个 iOS 应用程序中使用多个 UIWindow 实例。这样做的唯一正当理由是支持外部屏幕。您应该改用UIView,最好由UIViewController 管理。

我假设(由于您没有提供任何代码,我只能假设)您的窗口不“旋转”的原因是,它根本没有收到任何有关设备旋转的通知。只有keyWindow 默认接收它们。

我强烈建议您重新设计您的应用,以改用管理得当的UIView。如果您出于某种原因不希望这样做,则必须注册UIWindow 的实例以接收UIDeviceOrientationDidChangeNotification,然后(在处理程序中)评估新方向并相应地更改窗口的框架(加上可能需要做其他事情以响应方向变化)

【讨论】:

所以我使用窗口的原因是因为我们正在编写自己的自定义警报和咆哮消息。我们需要它在键盘和所有东西上弹出,而 UIWindow 是完美的工具 (.windowLevel = UIWindowLevelAlert :D) 所以,是的,不建议这样做,但要完成我们想要做的事情,我必须.我的警报很酷,因为您可以在视图中或在这个新的自定义窗口中显示它:-D 而且,在 ios6 中一切正常,我不明白为什么 ios5 会崩溃。我会考虑在自定义窗口中注册旋转事件。

以上是关于iOS5 自定义窗口旋转问题的主要内容,如果未能解决你的问题,请参考以下文章

在ios5的自定义相册中保存多个图像但不在相机胶卷中?

IOS5 中的自定义 UIMenuItem 太宽

添加自定义推送通知声音 ios5 不起作用

iOS5本地通知自定义声音xcode iOS iPhone Objective-c Xcode

iOS5将图像保存到自定义文件夹,ALAssetsLibrary 失败

IOS 5 TabBar 自定义