How to maintain presenting view controller's orientation when dismissing modal view controller?
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if ([self.window.rootViewController.presentedViewController isKindOfClass: [SecondViewController class]])
{
SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController;
if (secondController.isPresented)
return UIInterfaceOrientationMaskAll;
else return UIInterfaceOrientationMaskPortrait;
}
else return UIInterfaceOrientationMaskPortrait;
}
And for Swift
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> Int {
if self.window?.rootViewController?.presentedViewController? is SecondViewController {
let secondController = self.window!.rootViewController.presentedViewController as SecondViewController
if secondController.isPresented {
return Int(UIInterfaceOrientationMask.All.toRaw());
} else {
return Int(UIInterfaceOrientationMask.Portrait.toRaw());
}
} else {
return Int(UIInterfaceOrientationMask.Portrait.toRaw());
}
}
For more details check this link
Maintaining orientation of parent view after modal view has been presented with different orientation
I think the problem is your use of application:supportedInterfaceOrientationsForWindow:
. Instead, get rid of that, and start with a UINavigationController subclass and make that the class of the root view controller that is your navigation interface. Then:
In the UINavigationController subclass, return
UIInterfaceOrientationMaskLandscape
fromsupportedInterfaceOrientations
.In the presented (modal) view controller, return
UIInterfaceOrientationMaskAll
fromsupportedInterfaceOrientations
.
Portrait orientation in all view controllers except in modal view controller
In appDelegate:
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
special UINavigationController subclass (if you using navigation controller) with methods:
- (NSUInteger)supportedInterfaceOrientations {
if (self.topViewController.presentedViewController) {
return self.topViewController.presentedViewController.supportedInterfaceOrientations;
}
return self.topViewController.supportedInterfaceOrientations;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return self.topViewController.preferredInterfaceOrientationForPresentation;
}
each view controller should return it's own supported orientations and preferred presentation orientation:
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
my app works in portrait, but video player opens as modal vc with:
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeLeft;
}
It works perfect for me, hope it helps!
iOS8 - prevent rotation on presenting viewController
So after long days of searching and investigating, I finally came up with a possible solution.
First of all, I can use navigation controller and push the viewController instead of presenting it, but it breaks my code and just isn't so true.
The second thing I can do is not setting constraints. I still can use autolayout, but if I don't set constraints, and let the default constraints to be set, the tableView doesn't get reloaded. of course this is also isn't very smart thing to do, as I have many elements in my viewController.
Finally, I figured out that I can show this "modal" viewController in another UIWindow. I create UIWindow and set the modalViewController as its rootViewController.
I put some example project in git:
https://github.com/OrenRosen/ModalInWindow
Hope it will be helpful.
Related Topics
How to Set Uibutton Background Color Forstate: Uicontrolstate.Highlighted in Swift
Adding Google Maps as Subview Crashes iOS App with Exc_Bad
How to Open Fb and Instagram App by Tapping on Button in Swift
How to Authenticate the Gklocalplayer on My 'Third Party Server'
Add Custom Controls to Avplayer in Swift
Calculating Bearing Between Two Cllocation Points in Swift
How Much Delay of iOS Push Notification
Xctest and Asynchronous Testing in Xcode 6
How to Maintain Presenting View Controller's Orientation When Dismissing Modal View Controller
iOS 8 Tab Bar Item Background Colour
Custom Interactive Transition Animation
How to Detect the Orientation of the Device on iOS
Send Messages Between iOS and Watchos with Watchconnectivity in Watchos2