我一直在使用[[UIApplication sharedApplication] keyWindow]以UIView的形式获取屏幕的可见视图。然后,我将该视图转换为要使用的UIImage。这是很好的工作,除非我同时显示一个UIAlertView。在这种情况下,keyWindow并不像通常那样返回一个UIWindow,而是返回一个UIModalItemHostingWindow,在将该视图转换成图像之后,它只是一个纯黑色的屏幕截图。
现在,文档说keyWindow“在最近发送makeKeyAndVisible消息的窗口数组中保存UIWindow对象”。
这个UIModalItemHostingWindow肯定是由于我正在呈现的模态警报,也许keyWindow正在返回该视图,而不是整个屏幕。
我的问题是,我怎么能总是保证我得到一个UIView是一个准确的表示在屏幕上可见的一切?keyWindow似乎不是一个好的解决方案。一个解决办法是延迟我抛出的所有可能的警报,但是如果可能的话,我想找到一个更好的解决方案。
发布于 2014-10-30 02:28:45
使用[[[UIApplication sharedApplication] delegate] window]
而不是[[UIApplication sharedApplication] keyWindow]。
这保证了您得到UIWindow,这是应用程序的最终根视图。
发布于 2014-07-08 19:25:19
按反向顺序遍历所有窗口(只是为了减少迭代次数),并检查窗口的类是否严格为UIWindow
for (UIWindow *window in [[UIApplication sharedApplication].windows reverseObjectEnumerator]) {
if ([window class] == [UIWindow class]) {
// do whatever you want with the window object
break;
}
}https://stackoverflow.com/questions/24639082
复制相似问题