iPad view in incorrect orientation after dismissMoviePlayerViewControllerAnimated - cocoa-touch

My iPad app displays a movie full screen using the convenient MPMoviePlayerViewController class. I present it like this:
[self.hostController presentMoviePlayerViewControllerAnimated:playerViewController];
And later, when notified that playing is done, I dismiss it like this:
[self.hostController dismissMoviePlayerViewControllerAnimated];
It works fine, except when the user rotates the iPad during movie playback:
1- The iPad is in vertical orientation. My view is vertical.
2- The user starts the movie in vertical orientation. The player is vertical.
3- The user rotates the iPad to the horizontal orientation.
4- The player switches to its horizontal orientation. so far so good.
5- The movie stops, the player is dismissed, my reappears, the iPad is still horizontal, but my view has stayed in the vertical orientation is was in step 1. Now it looks sideways.
Of course, if the user then rotates the iPad, it's back to normal. My view then rotates normally as the iPad rotates.
Did anyone ever encounter that? An easy fix?
Thanks.

I've encountered this numerous times and it appears to be an Apple bug (and have reported it as such).
The only way (I've found) around this is to listen to UIDeviceOrientationDidChangeNotification and UIApplicationDidChangeStatusBarOrientationNotification notifications. Use the relative timestamp on these notifications; if they both occur within a second of each other, you can be sure that the status bar change is a result of the user switching orientations and not the media SDK changing the status bar orientation. Then, when the movie is finished, you can tell your view controller that it should rotate to landscape.

Related

Device orientation sometimes returns an unknown value when rotating too fast

I am implementing iAd on iPad, and since I'm creating everything programmatically, I need to manually move the frame of the ad every time the user rotates the screen.
I uses the notification center to detect when the user rotates the device.
The problem is, sometimes when I rotate the device too fast the orientation becomes "UIDeviceOrientationUnknown". In this case, how can I tell the screen orientation to adjust the ad position accordingly?
I do not wish to use auto-layout.
I normally ask the status bar for orientation, 'cause it's always either landscape or portrait, like so:
[UIApplication sharedApplication].statusBarOrientation. In any case, there are a few approaches. I recommend reading through this thread.

iOS Face Up Orientation Issue

Is there any way to differentiate between landscape and portrait when the device is sitting on a desk, i.e. UIDeviceOrientationFaceUp? I have two different xib files that I switch between based on the way the user is holding the device. But the problem arrises when I hold the device in landscape, and then place the device down. The device remains in landscape, but will load the portrait xib file. The problem would be opposite if in my coding I coupled the UIDeviceOrientationFaceUp with the landscape orientations: then I would have my landscape view showing when the device is still in portrait.
Is there any way to be able to figure out if the device is still showing landscape or portrait? I have tried checking frame width, but it claims it is 768 even if the device is sitting flat in landscape. And I can't force an orientation when the device goes flat, I hear thats the road to rejection on the App Store.
You can't do that. The accelerometer can't tell on which side of the phone the user is sitting when it's laid down on a table. You can measure rotation around it's axis using the gyroscope (and the compass), but that still doesn't tell you where the user is unfortunately.
There is one way to check it.
UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];
UIInterfaceOrientation statusBarOrientation =[UIApplication sharedApplication].statusBarOrientation;
Use the first one to check if the device is in faceup and second one will tell you if the device is in portrait or landscape.

iPad MPMoviePlayerController full screen rotation move all views

I have a problem with rotations in full screen mode in a MPMoviePlayerController: When I rotate the iPad in full screen mode the views behind the movie player rotate too, but there isn't a status bar and all moves 20 px up.
If I show the controllers and the status bar before rotate (pushing the screen) all works fine. Instance of that, I suppose the problem is caused because there isn't status bar durning the rotation.
Someone can help me please? Thanks
Finally I resolve the problem using a MPMoviePlayerViewController instead a MPMoviePlayerController.
Durning the full screen rotation the status bar doesn't disappear and all works fine :)

iPad orientation

I have question regarding changing orientation on iPad.
I use MonoTouch, but if Obj-C programmers can help, it will be just as great.
First of all, I figured out if I provide different splash screen images for different orientations, app will show the right one. This can be done for any orientation, such as "Default-LandscapeLeft.png", or generic one "Default-Landscape.png".
All of my images are of correct dimensions and yet, when I start it in portrait mode, it shows it enlarged. All of other modes work perfectly well.
Second problem is I want my app to continue to be in that orientation after my first controller appear. At the moment, it shows portrait in any case. I started generating orientation notifications before first controller appeared (UINavigationController), but I think it responds only on orientation changes. After I moved device, it rotates and from that moment, everything works fine. BUT, I want to "inherit" orientation info from my splash screen.
Any idea will be appreciated.
Thanks guys and girls.
Cheers
Images for different orientations:
Default.png and Default-Landscape.png should be provided + setting the app settings to provide the required orientations.
Second problem:
After creating the first controller call
myController.WillRotate(UIApplication.SharedApplication.StatusBarOrientation, 0);

iPad: problems with table rows in popovercontrol

I have an iPad application which implements the UISplitViewController. As usual I'm using the popover button to show the root view when the device is in portrait mode.
It's seems to be ok at time of launch, but if I turn the device to landscape, then back to portrait, the table in the popover, will have an additional blank row at top, so that I have to scroll down to see the others...
Where am I doing wrong?