Первоначальная ориентация iPad - PullRequest
1 голос
/ 06 мая 2011

Мне очень тяжело заставить свое приложение правильно поддерживать все ориентации. Проблема с запуском. Я сделал следующие шаги:

  1. Добавлено:

    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
    
  2. Убедитесь, что все мои контроллеры представления всегда возвращают YES в shouldAutorotateToInterfaceOrientation
  3. Добавлены все изображения по умолчанию *

В альбомной ориентации - приложение начинает показывать правильное изображение по умолчанию, но затем фактическое приложение запускается в портретной ориентации. Методы willRotate ... и shouldAutorotate .. не вызываются.

Я даже попробовал метод Swizzling (из Wordpress):

+ (void)youWillAutorotateOrYouWillDieMrBond {
    NSLog(@"youWillAutorotateOrYouWillDieMrBond");
    Swizzle([NSClassFromString(@"UISplitViewController") class], @selector(shouldAutorotateToInterfaceOrientation:), @selector(MyShouldAutorotateToInterfaceOrientation:), NULL);
    Swizzle([NSClassFromString(@"UIViewController") class], @selector(shouldAutorotateToInterfaceOrientation:), @selector(MyShouldAutorotateToInterfaceOrientation:), NULL);
}

- (BOOL)MyShouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    NSLog(@"MyShouldAutorotateToInterfaceOrientation (%@)", self);
    return(YES);
}

Тоже без удачи. Независимо от того, что я делаю - если устройство находится в альбомной ориентации, приложение запускается как портрет.

Я прочитал соответствующие документы Apple - и они утверждают, что приложения всегда запускаются в портретной ориентации, но затем поворачиваются, если VC поддерживают ориентацию. Кажется, я делаю все как надо ...

Действительно из идей здесь, был бы признателен за любую проницательность.

Ответы [ 4 ]

4 голосов
/ 12 мая 2011

Хорошо, спасибо всем, кто помог, но это не было одним из предложенных решений: Кажется, я наткнулся на какую-то ошибку iPAD.

Решение было простым:

В главном представлении не было событий по какой-то причине, и это было проблемой. Я обернул этот UIViewController внутри UINavigationController и установил его как Master. Затем навигационный контроллер DID получил события и передал их. Проблема решена!

0 голосов
/ 08 мая 2011

Сначала убедитесь, что у вас есть все четыре UISupportedInterfaceOrientations в вашем info.plist

Затем убедитесь, что вы добавляете разделенное представление в окно приложения (например, [self.window addSubview:splitViewController.view];) в applicationDidFinishLaunchingWithOptions делегата приложения, а не позже, что может вызвать эту проблему.

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

Надеюсь, это поможет!

0 голосов
/ 09 мая 2011

Если вы не можете решить проблему, попробуйте добавить это в ваш файл Info.plist. Это работает для меня в моем универсальном приложении:

<key>UISupportedInterfaceOrientations~ipad</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationPortraitUpsideDown</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>

Разница в том, что вы заставляете эти свойства быть привязанными к iPad через фрагмент ~ipad.

Если вы хотите принудительно установить ориентацию при запуске приложения, попробуйте обновить метод applicationDidFinishLaunching:, добавив его, чтобы заставить уведомления об изменении ориентации:

UIDevice *device = [UIDevice currentDevice];
[device beginGeneratingDeviceOrientationNotifications];

Надеюсь, это поможет.

Если это не работает, это может быть проблемой, связанной с инициализацией вашего приложения, то есть способом, которым вы создаете UISplitViewController и добавляете к нему контроллеры сторон и деталей. В таком случае, пожалуйста, пройдите этот фрагмент кода.

0 голосов
/ 06 мая 2011

Возможно, проблема в том, что ваше перо установлено в неправильном режиме. Вы можете изменить начальную позицию перьев на альбомную или горизонтальную. Я обнаружил, что это проще, чем работать с контроллером представления.

Для этого перейдите в Интерфейсный конструктор, выберите вид. Выберите крайнюю левую вкладку в окне «Просмотр атрибутов» и измените ориентацию на альбомную.

...