2010-12-13 3 views
3

У меня есть UIViewController с кучей подзонов, которые мне нужно выложить в другом порядке, если iPad находится в портретном или альбомном режиме. Я хотел бы иметь возможность захватить размер, который будет отображаться в представлении UIViewController после поворота, чтобы я мог рассчитать новый набор кадров для моих подзонов. Тем не менее, я не нашел никакого способа получить этот новый размер до того, как произойдет ротация, и к тому времени, когда произойдет ротация, уже слишком поздно, так как я не могу оживить переход подзонов в их новые места.Получение размера представления UIViewController после ротации

Кто-нибудь знает об этом?

ответ

3

Вы пробовали willAnimateRotationToInterfaceOrientation:duration:. Как указано в документации:

К моменту вызова этого метода свойство interfaceOrientation уже настроено на новую ориентацию. Таким образом, вы можете выполнить любой дополнительный макет, необходимый вашим представлениям в этом методе.

Я считаю, что вид контроллера контроллера также должен иметь свои новые размеры в этом методе.

+0

В настоящее время я пытаюсь выяснить эту же проблему, и я обнаружил, что вид еще не имеет новых измерений. Если я установил ширину представления в 'willAnimateRotationToInterfaceOrientation: duration', тогда представление будет иметь разницу в размере строки состояния на стороне. – Aaron

1

Определите landscape и portrait представлений в вашем заголовке, прикрепить их в строитель интерфейс, и попробуйте этот код:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    if(((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
     (interfaceOrientation == UIInterfaceOrientationLandscapeRight))){ 

     self.view = landscape; 

}else if(((interfaceOrientation == UIInterfaceOrientationPortrait) || 
    (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))){ 

     self.view = portrait; 

    } 
    return YES; 
} 

Это намного проще, чем вычисление новых кадров для каждого объекта в представлении.

Чтобы оживить, вы можете добавить [UIView beginAnimations:@"animation" context:nil]; & [UIView commitAnimations];, чтобы оживить новый вид.

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