Проблема с поворотом от первого вида (заставки) к первому viewController

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

- (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), который имеет те же методы без вызовов для libraryTableBorder. Независимо от того, из какого поворота устройство выходит или переходит к представлению ввода, граница таблицы меняется правильно. И, при переходе из библиотеки либо в entryView, либо в заставку, представления правильные.

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

Будем признательны за любую помощь в решении этой головоломки!!!


person Marc Watson    schedule 09.01.2013    source источник


Ответы (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"];
    }
}

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

person Marc Watson    schedule 23.01.2013