keyWindow并不总是返回UIWindow

时间:2014-07-08 18:24:29

标签: ios objective-c uiview uiwindow keywindow

我一直在使用[[UIApplication sharedApplication] keyWindow]UIView的形式获取屏幕的可见视图。然后我将该视图转换为UIImage以使用。除了我同时显示UIAlertView的情况外,这种方法效果很好。在这种情况下,keyWindow没有像往常一样返回UIWindow,而是返回UIModalItemHostingWindow,并且在将该视图转换为图片后,它只是一个纯黑色截图。

现在,文档说keyWindow"在最近发送makeKeyAndVisible消息的windows数组中保存UIWindow对象。"

UIModalItemHostingWindow必须归因于我提出的模态警报,或许keyWindow正在返回该视图而不是整个屏幕。

我的问题是,我怎样才能始终保证我得到的UIView能准确反映屏幕上显示的所有内容?似乎keyWindow不是一个好的解决方案。一种解决方法是延迟我抛出的所有可能的警报,但我想找到一个更好的解决方案,如果可能的话

2 个答案:

答案 0 :(得分:4)

使用[[[UIApplication sharedApplication] delegate] window]

而不是[[UIApplication sharedApplication] keyWindow]

这可以保证您获得UIWindow,这是该应用的最终根视图。

答案 1 :(得分:1)

以相反的顺序遍历所有窗口(只是为了减少迭代)并检查窗口的类是否严格UIWindow

for (UIWindow *window in [[UIApplication sharedApplication].windows reverseObjectEnumerator]) {
    if ([window class] == [UIWindow class]) {
        // do whatever you want with the window object
        break;
    }
}