3

我一直在[[UIApplication sharedApplication] keyWindow]使用UIView. 然后我将该视图转换为UIImage可使用的视图。除了我同时显示 a 的情况外,这很好用UIAlertView。在这种情况下,keyWindow它不会UIWindow像通常那样返回 a ,而是返回 a UIModalItemHostingWindow,并且在将该视图转换为图像之后,它只是一个纯黑色的屏幕截图。

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

UIModalItemHostingWindow一定是由于我正在呈现的模式警报,也许keyWindow是返回该视图而不是整个屏幕。

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

4

2 回答 2

4

采用[[[UIApplication sharedApplication] delegate] window]

而不是[[UIApplication sharedApplication] keyWindow].

这可以保证您获得UIWindow应用程序的最终根视图。

于 2014-10-30T02:28:45.677 回答
1

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

for (UIWindow *window in [[UIApplication sharedApplication].windows reverseObjectEnumerator]) {
    if ([window class] == [UIWindow class]) {
        // do whatever you want with the window object
        break;
    }
}
于 2014-07-08T19:25:19.057 回答