keyWindow не всегда возвращает UIWindow
Я использую [[UIApplication sharedApplication] keyWindow]
чтобы получить видимый вид экрана в виде UIView
, Затем я превращаю эту точку зрения в UIImage
работать с. Это работает отлично, за исключением случая, когда я показываю UIAlertView
в то же время. В таком случае, keyWindow
не возвращает UIWindow
как обычно, но вместо этого он возвращает UIModalItemHostingWindow
и после преобразования этого вида в изображение это просто черный скриншот.
Теперь документы говорят keyWindow
msgstr "содержит объект UIWindow в массиве windows, который последний раз отправлял сообщение makeKeyAndVisible."
это UIModalItemHostingWindow
должно быть из-за модального оповещения, которое я представляю, возможно keyWindow
возвращает это представление вместо всего экрана.
У меня вопрос, как я могу всегда гарантировать, что я получу UIView
это точное представление всего, что видно на экране? Похоже на то keyWindow
не очень хорошее решение Одним из обходных путей является задержка всех возможных предупреждений, которые я выбрасываю, но я хотел бы найти лучшее решение, если это возможно
2 ответа
Использование [[[UIApplication sharedApplication] delegate] window]
вместо [[UIApplication sharedApplication] keyWindow]
,
Это гарантирует, что вы получите UIWindow
который является окончательным корневым представлением приложения.
Обходите все окна в обратном порядке (просто чтобы сделать меньше итераций) и проверьте, строго ли класс окна UIWindow
:
for (UIWindow *window in [[UIApplication sharedApplication].windows reverseObjectEnumerator]) {
if ([window class] == [UIWindow class]) {
// do whatever you want with the window object
break;
}
}