Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Blacked-out interface rotation when using second UIWindow with rootViewController

(iOS 7.0.3, Xcode 5.0.1)

I have a second UIWindow in my app used to display a custom magnifier above the status bar. However, once I set the rootViewController of this window (for interface rotation & some other stuff), the main window goes black during the interface rotation animation.

To reproduce: create single view iOS application and add the following to the main UIViewController.

// To @interface:
@property (nonatomic, strong) UIWindow *secondWindow;
// In viewDidLoad:
self.secondWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.secondWindow.rootViewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
self.secondWindow.hidden = NO;

Any help appreciated.

like image 717
Patrick Pijnappel Avatar asked Nov 05 '13 06:11

Patrick Pijnappel


2 Answers

I will add another answer, because I have found a workaround that actually works. Set the window's background color, as well as the view controller's view's background color to a color with an alpha of 0. Do not use clearColor, but rather use something like greenColor] colorWithAlphaComponent:0.0]; It works.

like image 141
Léo Natan Avatar answered Sep 21 '22 12:09

Léo Natan


According to an Apple engineer on the dev forums, this is expected due to the window adding a black background to avoid things behind it to be seen (i.e. behind the main window normally). I opened and issue with the Apple bug tracker, #15398141.

Nevertheless, I worked around the issue by hiding the window in willRotateToInterfaceOrientation:duration: and unhiding it in didRotateFromInterfaceOrientation:, which luckily is not a big deal in this case.

like image 40
Patrick Pijnappel Avatar answered Sep 18 '22 12:09

Patrick Pijnappel