我一直在使用[[UIApplication sharedApplication] keyWindow]
以UIView
的形式获取屏幕的可见视图。然后我将该视图转换为UIImage
以使用。除了我同时显示UIAlertView
的情况外,这种方法效果很好。在这种情况下,keyWindow
没有像往常一样返回UIWindow
,而是返回UIModalItemHostingWindow
,并且在将该视图转换为图片后,它只是一个纯黑色截图。
现在,文档说keyWindow
"在最近发送makeKeyAndVisible消息的windows数组中保存UIWindow对象。"
此UIModalItemHostingWindow
必须归因于我提出的模态警报,或许keyWindow
正在返回该视图而不是整个屏幕。
我的问题是,我怎样才能始终保证我得到的UIView
能准确反映屏幕上显示的所有内容?似乎keyWindow
不是一个好的解决方案。一种解决方法是延迟我抛出的所有可能的警报,但我想找到一个更好的解决方案,如果可能的话
答案 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;
}
}