2012-02-17 2 views
0

У меня есть приложение для iPad, у которого есть 2 вида, каждый со своим собственным контроллером View. Apple заявляет, что они предлагают iPad-приложениям возможность вращаться во всех направлениях. Я использовал эту технику, чтобы расположить элементы в моей раскадровке об изменениях вращения:iOS 5 Multi Storyboard Rotation

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    //[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 

    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
    { 
     studentNumberButton.frame = CGRectMake(30, 1, 158, 155); 
     studentNumberLabel.frame = CGRectMake(173, 57, 347, 43); 
     studentLabel.frame = CGRectMake(528, 56, 67, 43); 

     // Other code goes below... 

Я сделал это для каждого вида и она отлично работает для всех вращений. Однако проблема возникает, когда я говорю: iPad на View Controller 1 в альбомной ориентации и нажмите кнопку, чтобы показать View Controller 2, View Controller 2 подходит просто отлично, но находится в режиме Portrait. То же самое происходит, если я в ландшафтном режиме для View Controller 2 и перейдите в View Controller 1. Если я в портретном режиме, все будет хорошо для обоих представлений.

Как я могу это сделать, когда переключаю виды, представление знает, какая ориентация устройства находится и вращается соответственно?

Спасибо!

ответ

0

Вам нужно добавить метод viewWillAppear следующим образом:

- (void)viewWillAppear:(BOOL)animated { 
if (([self interfaceOrientation] == UIDeviceOrientationLandscapeLeft)|| ([self interfaceOrientation] == UIDeviceOrientationLandscapeRight)) { 

    studentNumberButton.frame = CGRectMake(30, 1, 158, 155); 
    studentNumberLabel.frame = CGRectMake(173, 57, 347, 43); 
    studentLabel.frame = CGRectMake(528, 56, 67, 43); 
    ... 

} else { 
    ... 
} 

}

Смежные вопросы