Since willAnimateRotationToInterfaceOrientation:duration:
is deprecated in iOS8, one needs to use viewWillTransitionToSize:withTransitionCoordinator:
instead.
However, this method does not get called in my view controller on iOS8. Is there anything else, I need to implement, in order for this callback to work?
I cannot find anything in the documentation. The only thing I could find, was that it belongs to the new UIContentContainer
protocol. However, even if I am adding this to the protocols of my controller explicitly, it does not work.
Any ideas?
The viewWillTransitionToSize:withTransitionCoordinator:
seems to only work if the interface is actually going to change size, meaning we have rotated 90 degrees. If you have a mask on your layout that only allows landscape, when rotation 180 degrees, the interface size doesn't change, so this method doesn't seem to be called.
I have worked around this in my app by instead registering to the UIDeviceOrientationDidChangeNotification
notification like:
(In my view controller's viewWillAppear
):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil]; [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
(An in my viewWillDisappear
[remember to unsubscribe])
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
My deviceOrientationDidChange:
looks like:
- (void)deviceOrientationDidChange:(NSNotification *)notification { UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; [self willRotateToInterfaceOrientation:orientation duration:1.0]; }
As per the docs, remember to call super
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; // ... }
Otherwise child view controllers will not get the message forwarded on to them.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With