Изменение ориентации ViewController - PullRequest
1 голос
/ 08 ноября 2011

Я нажимаю ViewController, когда iPhone меняет ориентацию на альбомную, и у меня возникают проблемы с изменением ориентации ViewController.

Я использовал этот код:

    - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
Storage *strg = [Storage sharedStorage];

if ([strg.orient intValue] == 2) 
{
    [[UIApplication sharedApplication] setStatusBarOrientation:
     UIInterfaceOrientationLandscapeRight];

    UIScreen *screen = [UIScreen mainScreen];
    CGFloat screenWidth = screen.bounds.size.width;
    CGFloat screenHeight = screen.bounds.size.height;
    UIView *navView = [[self navigationController] view];
    navView.bounds = CGRectMake(0, 0, screenHeight, screenWidth);
    navView.transform = CGAffineTransformIdentity;
    navView.transform = CGAffineTransformMakeRotation(1.57079633);
    navView.center = CGPointMake(screenWidth/2.0, screenHeight/2.0);
    [UIView commitAnimations];
}
if ([strg.orient intValue] == 1)
{
    [[UIApplication sharedApplication] setStatusBarOrientation:
     UIInterfaceOrientationLandscapeLeft];

    UIScreen *screen = [UIScreen mainScreen];
    CGFloat screenWidth = screen.bounds.size.width;
    CGFloat screenHeight = screen.bounds.size.height;
    UIView *navView = [[self navigationController] view];
    navView.bounds = CGRectMake(0, 0, screenHeight, screenWidth);
    navView.transform = CGAffineTransformIdentity;
    navView.transform = CGAffineTransformMakeRotation(4.71238898);
    navView.center = CGPointMake(screenWidth/2.0, screenHeight/2.0);
    [UIView commitAnimations];
}
}

Результат не соответствует; иногда он переходит в правильную ориентацию, а иногда вверх ногами.

Когда я перехожу из LandcapeRight в пролив LandscapeLeft (и наоборот), он работает нормально, проблема только в том, что я перехожу в портретный режим.

Есть идеи, что я делаю не так?

1 Ответ

1 голос
/ 08 ноября 2011

Если вы действительно реагируете на изменение ориентации устройства, вам, вероятно, не следует использовать setStatusBarOrientation.Я думаю, что вам было бы лучше сделать так, чтобы ваши контроллеры вида поворачивались в поддерживаемые ориентации с помощью уведомлений shouldAutorotateToInterfaceOrientation и deviceDidRotateSelector.

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(deviceDidRotateSelector:) name: UIDeviceOrientationDidChangeNotification object: nil];

-(void)deviceDidRotateSelector:(NSNotification*) notification {
// respond to rotation here
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
//Return YES for supported orientations
return YES;
}
...