Проблема поворота с первого взгляда (всплеск) на первый просмотрController

Я работаю в Xcode 4.5.2, ориентируясь на iOS6 для iPad-приложения, используя раскадровки и segues. Преамбула: мой корневой контроллер (загруженный делегатом приложения) представляет собой заставку с изображением, кнопкой обновления и кнопкой открытия. Для загрузки приложения требуется несколько секунд. У меня должно быть Autorotate и поддерживаетсяInterfaceOrientations во всех трех моих полноэкранных контроллерах. Для уведомления о ротации я использую следующие два метода в контроллере корневого представления:

- (void)awakeFromNib
{
    [UIDevice.currentDevice beginGeneratingDeviceOrientationNotifications];
    [NSNotificationCenter.defaultCenter addObserver:self
                                       selector:@selector(orientationChanged:)
                                           name:UIDeviceOrientationDidChangeNotification
                                         object:nil];
}

- (void)orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation))
    {
        // Landscape
        CGRect rect = _libraryViewController.libraryTableBorder.frame;
        _libraryViewController.libraryTableBorder.frame = rect;
        _libraryViewController.libraryTableBorder.image = [UIImage imageNamed:@"LibraryBorder_L.png"];
    }
    else if (UIDeviceOrientationIsPortrait(deviceOrientation))
    {
        // Portrait
        CGRect rect = _libraryViewController.libraryTableBorder.frame;
        _libraryViewController.libraryTableBorder.frame = rect;
        _libraryViewController.libraryTableBorder.image = [UIImage imageNamed:@"LibraryBorder_P.png"];
    }
}

У меня есть те же самые методы в LibraryViewController, и он отлично работает. У меня есть другой главный контроллер представления (entryView), который имеет те же методы без вызовов для библиотеки TableBorder. Независимо от того, какая ротация происходит от устройства или идет в представление входа, граница таблицы сворачивается правильно. И, переходя из библиотеки в entryView или во всплеск, представления верны.

Проблема идет из представления всплеска в ландшафте в библиотеку. Переход в библиотеку в Потрейте отлично работает, а граница отображается на границе с портретом. Но в ландшафте также отображается граница портрета. Как я могу получить границу библиотеки для отображения в ландшафте при выходе из корневого представления, когда она находится в ландшафте?

Любая помощь в решении этой головоломки была бы высоко оценена!!!

Ответ 1

Я нашел решение этой проблемы... viewWillLayoutSubviews

Мне был предложен другой поток, в котором указаны примечания к выпуску для iOS6. Я добавил UIDeviceOrientation и мой оператор if/else. Теперь граница вращается правильно, независимо от того, с какого вида я иду или из!

- (void)viewWillLayoutSubviews
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation))
    {
        // Landscape
        CGRect rect = _libraryTableBorder.frame;
        _libraryTableBorder.frame = rect;
        _libraryTableBorder.image = [UIImage imageNamed:@"LibraryBorder_L.png"];
    }
    else if (UIDeviceOrientationIsPortrait(deviceOrientation))
    {
        // Portrait
        CGRect rect = _libraryTableBorder.frame;
        _libraryTableBorder.frame = rect;
        _libraryTableBorder.image = [UIImage imageNamed:@"LibraryBorder_P.png"];
    }
}

Это было очень неприятно для меня. Надеюсь, это поможет кому-то еще!