I am adding an additional UIWindow to my app. My main window rotates correctly, but this additional window I have added does not rotate.
What is the best way to rotate a UIWindow according to the current device orientation?
You need to roll your own for UIWindow.
Listen for UIApplicationDidChangeStatusBarFrameNotification
notifications, and then set the the transform when the status bar changes.
You can read the current orientation from -[UIApplication statusBarOrientation]
, and calculate the transform like this:
#define DegreesToRadians(degrees) (degrees * M_PI / 180)
- (CGAffineTransform)transformForOrientation:(UIInterfaceOrientation)orientation {
switch (orientation) {
case UIInterfaceOrientationLandscapeLeft:
return CGAffineTransformMakeRotation(-DegreesToRadians(90));
case UIInterfaceOrientationLandscapeRight:
return CGAffineTransformMakeRotation(DegreesToRadians(90));
case UIInterfaceOrientationPortraitUpsideDown:
return CGAffineTransformMakeRotation(DegreesToRadians(180));
case UIInterfaceOrientationPortrait:
default:
return CGAffineTransformMakeRotation(DegreesToRadians(0));
}
}
- (void)statusBarDidChangeFrame:(NSNotification *)notification {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
[self setTransform:[self transformForOrientation:orientation]];
}
Depending on your window´s size you might need to update the frame as well.