Мой UIWindow
изначально имеет белый фон. Я хочу изменить фон на синий (постоянно), когда устройство вращается. Но на самом деле цвет кратковременно мигает синим, а затем возвращается к белому.
В приложении делегат:
- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
{
self.window.backgroundColor = [UIColor blueColor];
}
Этот код вызывается, как и ожидалось, но когда вращение завершается, -[UIWindow setBackgroundColor:]
вызывается во второй раз (как я обнаружил при создании подкласса UIWindow
). Стек вызовов для второго вызова:
-[UIWindow setBackgroundColor]
-[UIWindow _finishedFullRotation:finished:context:]
-[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
-[UIViewAnimationState animationDidStop:finished:]
-run_animation_callbacks
...
Редактировать (для ответа @ VinceBurn)
Приложение имеет ровно одно представление (из шаблона проекта приложения Xcode на основе представления). Теперь я установил цвет фона представления (в IB) на 0% непрозрачности. Все еще получаю те же результаты.
Чтобы убедиться, что белый цвет не исходит от какой-либо другой настройки цвета по умолчанию, сейчас я изначально устанавливаю зеленый цвет фона окна:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// Add the view controller's view to the window and display.
self.window.backgroundColor = [UIColor greenColor];
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];
return YES;
}
Когда он вращается, он кратковременно мигает синим, но возвращается к зеленому.