Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Landscape orientation but portrait frame values?

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}}.

like image 653
VansFannel Avatar asked Mar 19 '13 15:03

VansFannel


2 Answers

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.

like image 61
drewmm Avatar answered Nov 13 '22 14:11

drewmm


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:.

like image 34
VansFannel Avatar answered Nov 13 '22 13:11

VansFannel