I'm developing an iOS application with latest SDK.
I have set Landscape right orientation as the unique orientation available and I have a question about viewController view.
This is my code:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceOrientationDidChange:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != AVCaptureVideoOrientationLandscapeRight);
}
- (void)deviceOrientationDidChange:(NSNotification*)notification
{
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (orientation == AVCaptureVideoOrientationLandscapeLeft)
NSLog(@"Orientation: Landscape Left");
else if (orientation == AVCaptureVideoOrientationLandscapeRight)
NSLog(@"Orientation: Landscape Right");
NSLog(@"FRAME: %@", NSStringFromCGRect(self.view.frame));
}
And this is the log that I get:
Orientation: Landscape Right
FRAME: {{0, 0}, {320, 568}}
Orientation: Landscape Right
FRAME: {{0, 0}, {320, 568}}
My question is about {{0, 0}, {320, 568}}
:
Why am I getting these values?
I think the correct values would be {{0, 0}, {568, 320}}
.
I believe that the frame rects don't react to orientation change.
EDIT: My original solution was overly complicated for your needs. If you're correctly finding the current orientation, then just interpret the width of the rect as the height if you're in landscape mode.
I add this solution to show what happens with frame and bound.
I've added these three methods:
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
CGRect bounds = [view bounds];
NSLog(@"FRAME: %@", NSStringFromCGRect(view.frame));
NSLog(@"BOUNDS: %@", NSStringFromCGRect(bounds));
}
- (void)deviceOrientationDidChange:(NSNotification*)notification
{
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (orientation == AVCaptureVideoOrientationLandscapeLeft)
NSLog(@"1. Orientation: Landscape Left");
else if (orientation == AVCaptureVideoOrientationLandscapeRight)
NSLog(@"1. Orientation: Landscape Right");
NSLog(@"1. FRAME: %@", NSStringFromCGRect(self.view.frame));
NSLog(@"1. BOUNDS: %@", NSStringFromCGRect(self.view.bounds));
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (orientation == AVCaptureVideoOrientationLandscapeLeft)
NSLog(@"2. Orientation: Landscape Left");
else if (orientation == AVCaptureVideoOrientationLandscapeRight)
NSLog(@"2. Orientation: Landscape Right");
NSLog(@"2. FRAME: %@", NSStringFromCGRect(self.view.frame));
NSLog(@"2. BOUNDS: %@", NSStringFromCGRect(self.view.bounds));
}
- (void)viewDidLayoutSubviews
{
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (orientation == AVCaptureVideoOrientationLandscapeLeft)
NSLog(@"3. Orientation: Landscape Left");
else if (orientation == AVCaptureVideoOrientationLandscapeRight)
NSLog(@"3. Orientation: Landscape Right");
NSLog(@"3. FRAME: %@", NSStringFromCGRect(self.view.frame));
NSLog(@"3. BOUNDS: %@", NSStringFromCGRect(self.view.bounds));
}
And this is what I get:
FRAME: {{0, 0}, {320, 568}}
BOUNDS: {{0, 0}, {320, 568}}
3. Orientation: Landscape Right
3. FRAME: {{0, 0}, {320, 568}}
3. BOUNDS: {{0, 0}, {568, 320}}
1. Orientation: Landscape Right
1. FRAME: {{0, 0}, {320, 568}}
1. BOUNDS: {{0, 0}, {568, 320}}
1. Orientation: Landscape Right
1. FRAME: {{0, 0}, {320, 568}}
1. BOUNDS: {{0, 0}, {568, 320}}
Bound changes on viewDidLayoutSubviews:
.
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