Получение размера представления UIViewController после поворота

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

Кто-нибудь знает способ обойти это?


person johnw188    schedule 13.12.2010    source источник


Ответы (2)


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

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

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

person Ole Begemann    schedule 13.12.2010
comment
В настоящее время я пытаюсь решить эту же проблему и обнаружил, что представление еще не имеет новых размеров. Если я установлю ширину представления в willAnimateRotationToInterfaceOrientation:duration, то представление закончится с зазором размером со строку состояния сбоку. - person Aaron; 29.05.2013

Определите свои представления 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];, чтобы анимировать новый вид.

person WrightsCS    schedule 13.12.2010