Мой 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;
}
Когда он вращается, он ненадолго мигает синим цветом, но снова становится зеленым.
-application:didFinishLaunchingWithOptions:
. Одинаковые результаты в любом случае. - person jlstrecker   schedule 06.12.2011