Получите ваше приложение в альбомном режиме и выполните следующий код:
UIWindow *toastWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
toastWindow.hidden = NO;
toastWindow.backgroundColor = [[UIColor cyanColor] colorWithAlphaComponent:0.5f];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[toastWindow removeFromSuperview];
});
В iOS 7 вы получите прозрачный синий оверлей поверх всего экрана, который исчезает через 5 секунд. В iOS 8 вы получите прозрачный синий накладной, который покрывает чуть более половины экрана
Это, очевидно, имеет какое-то отношение к изменению, которое Apple сделала в iOS 8, где координаты экрана теперь ориентированы на интерфейс, а не ориентированы на устройства, но в истинном стиле Apple они, похоже, оставили множество ошибок в ландшафтном режиме и ротации.
Я могу "исправить" это, проверив, является ли ориентация устройства ландшафтом и переверните ширину и высоту границ главного экрана, но это похоже на ужасный хак, который сломается, когда Apple снова изменит все в iOS 9.
CGRect frame = [[UIScreen mainScreen] bounds];
if (UIInterfaceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
frame.size.width = frame.size.height;
frame.size.height = [[UIScreen mainScreen] bounds].size.width;
}
UIWindow *toastWindow = [[UIWindow alloc] initWithFrame:frame];
toastWindow.hidden = NO;
toastWindow.backgroundColor = [[UIColor cyanColor] colorWithAlphaComponent:0.5f];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[toastWindow removeFromSuperview];
});
Кто-нибудь сталкивался с этой проблемой и сталкивался с лучшим, менее хрупким решением?
EDIT: Я знаю, что могу просто использовать UIView и добавить его в ключевое окно, но я бы хотел поставить что-то поверх строки состояния.