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;
    }
}
Другие вопросы по тегам