Обрабатывать ориентацию при отображении вида

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

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

Имейте в виду, что мне нужно будет внести несколько незначительных изменений, поэтому я не хочу загружать другой наконечник или что-то в этом роде.

Спасибо большое :)

РЕДАКТИРОВАТЬ * просто для прояснения ситуации: как я уже упоминал, представление еще даже не создается при изменении ориентации устройства. Ориентация меняется на альбомную -> пользователь нажимает кнопку, которая показывает другой вид -> этот новый вид создается и отображается, но его позиционирование по умолчанию соответствует книжной ориентации -> когда отображается вид, элементы, которые я переставляю в методе willAnimateRotationToInterfaceOrientation находятся в неправильном положении.


person Craigt    schedule 06.09.2011    source источник


Ответы (1)


Обычно я помещаю анимацию, которая возникает, когда пользователь поворачивает устройство (в основном, манипулируя кадрами представлений) в методе willAnimateToInterfaceOrientation. В виде скелета это будет выглядеть так:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
                                         duration:(NSTimeInterval)duration
{
    //NSLog(@"willAnimateRotationToInterfaceOrientation: %d", toInterfaceOrientation);

    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
    {
        // portrait
    }
    else
    {
        // landscape
    }
}

РЕДАКТИРОВАТЬ: В ситуациях, когда мне нужно запомнить вращение устройства для будущего использования, я устанавливаю ivar в своем классе контроллера представления с именем currentOrientation (тип int), а затем делаю это:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    //NSLog(@"shouldAutorotateToInterfaceOrientation: %d", toInterfaceOrientation);

    if (toInterfaceOrientation == UIDeviceOrientationPortrait || toInterfaceOrientation == UIDeviceOrientationPortraitUpsideDown ||
        toInterfaceOrientation == UIDeviceOrientationLandscapeLeft || toInterfaceOrientation == UIDeviceOrientationLandscapeRight)
    {
        currentOrientation = toInterfaceOrientation;
    }

    return YES;
}

Затем при запуске методов в контроллере представления я знаю, в какой ориентации находится устройство.

person BP.    schedule 06.09.2011
comment
Как я уже упоминал, представление еще даже не создается при изменении ориентации устройства. Ориентация меняется на альбомную -> пользователь нажимает кнопку, которая показывает другой вид — этот новый вид создается и отображается, но его позиционирование по умолчанию — портретная ориентация —> когда отображается вид, элементы, которые я переустанавливаю в методе willAnimateRotationToInterfaceOrientation находятся в неправильном положении. - person Craigt; 07.09.2011
comment
Вы нашли решение этой проблемы? У меня такая же проблема. У меня есть портретные значения по умолчанию в viewDidLoad, и как пейзажные, так и портретные кадры устанавливаются в методе willAnimateRotationtoInterfaceOrientation, но если экран загружается непосредственно в ландшафт, этот метод никогда не вызывается. - person Ryan; 08.02.2012