Получение правильного фрейма внутри willRotateToInterfaceOrientation - PullRequest
5 голосов
/ 11 сентября 2011

Мои подпредставления имеют разную компоновку в портретной и альбомной ориентации. Макет основан на рамке суперпредставления и не является тривиальным (это невозможно сделать с помощью пружин и распорок с автоматическим изменением размера).

Проблема в том, что если я изменяю фрейм подпредставлений во время willRotateToInterfaceOrientation, анимация правильная, но фрейм superView остается фреймом со старой ориентации.

Если я изменяю subViews во время didRotateFromInterfaceOrientation, фрейм superView действительно правильный, но смена фрейма происходит только после вращающейся анимации и выглядит не очень хорошо.

Как правильно изменить кадры подпредставлений при изменении ориентации?

Ответы [ 2 ]

4 голосов
/ 19 ноября 2011

Эта функция работает для того, что вам нужно, потому что рамка просмотра изменилась по сравнению с вращением и не останавливает пользовательскую анимацию.

-(void)willAnimateRotationToInterfaceOrientation (UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    float width = UIInterfaceOrientationIsPortrait(toInterfaceOrientation) ? [[UIScreen mainScreen] applicationFrame].size.width : [[UIScreen mainScreen] applicationFrame].size.height;
//do something with the width now
//or you can get the height the same way
}
3 голосов
/ 11 сентября 2011

Я думаю, вы можете попробовать переопределить layoutSubviews.Там вы можете расположить подпредставления в соответствии с текущей ориентацией, не беспокоясь о will / did RotateFromInterfaceOrientation.layoutSubviews вызывается каждый раз, когда выкладываются представления.Это поможет вам определить время смены кадра с помощью анимации.

HTH,

Акшай

...