I have iPhone (iPhoneOS 3.x) OpenGL ES app that:
- can be in landscape/portrait orientation
- can be with/without status bar shown
I do this by changing status bar orientation and hidden state, then updating OpenGL view frame so it won't overlap status bar and setting projection matrix appropriately.
OpenGL view is in portrait orientation at all time. View controller's shouldAutorotateToInterfaceOrientation:
method returns false always, so the status bar won't start autorotating when app is in landscape mode.
The problem I have is that I want to use some other UIViews, like: UIWebView
, MFMailComposeView
, MPMediaPicker
.
I could show them as modals, but this this have some drawbacks:
- views will always show in portrait orientation, even if they support landscape orientation
- views will not autorotate, even if they support it
What I do is I take OpenGL view of the window with removeFromSuperview
, set transform to the other view so it will be in portrait/landscape orientation when it shows up and place the other view on the window with addSubview:
.
This works fine without the status bar, but with it there are some problems I cannot work out:
MPMediaPicker
is sized to fit under status bar, but it slides under it anywayMFMailComposeView
does not show navigation bar until it autorotates on device orientation change
Edit: It also appears that problems occure only when application is in portrait orientation. When in landscape orientation MPMediaPicker
shows in portrait (does not support landscape) without sliding under status bar, and MPMailComposeView
shows in landscape with nice blue navigation bar.
Does anyone has an idea how can I get it to work?