Мое приложение запускается с ног на голову - PullRequest
3 голосов
/ 17 октября 2011

Двигатель, над которым я работал некоторое время и поставлял игры, теперь запускает мой текущий проект с ног на голову, и сразу же поворачивает UIView так, как это должно быть.Я создаю интерфейс с кодом, и это примерно так:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{    
    ...

    CGRect screenBounds = [[UIScreen mainScreen] applicationFrame]; 
    CGRect windowBounds = screenBounds; 
    windowBounds.origin.y = 0.0;
    UIWindow* win = [[UIWindow alloc] initWithFrame:windowBounds];  
    win.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    UIMyView* view = [[UIMyView alloc] initWithFrame:screenBounds]; 
    UIMyViewController* controller = [[UIMyViewController alloc] init]; 
    controller.view = view; 

    view.multipleTouchEnabled = true;   
    view.windowWrapper = this;  
    view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    [win addSubview:view];

    ...
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation;
{
    s32 validOrientations = ((cViewMM*)(self.view)).windowWrapper->GetValidOrientations();
    if (toInterfaceOrientation == UIInterfaceOrientationPortrait && (validOrientations & 0x01))
        return true;

    if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown && (validOrientations & 0x02))
        return true;

    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft && (validOrientations & 0x04))
        return true;

    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight && (validOrientations & 0x08))
        return true;

    return false;
}

Проблема возникает, только если я хочу запустить приложение в UIInterfaceOrientationLandscapeLeft.Отладка через приложение выглядит так, когда я пытаюсь добавить свой вид к окну внутренне, shouldAutorotateToInterfaceOrientation: вызывается несколько раз.Сначала с UIInterfaceOrientationPortrait, который возвращает false, затем UIInterfaceOrientationLandscapeRight, который возвращает true (поскольку это действительная ориентация), а затем UIInterfaceOrientationLandscapeLeft, который также возвращает true (так как это действительная ориентация и текущая ориентация устройства).

Oh и, чтобы быть болееКонкретно это происходит только на iPhone, а не на iPad.Они используют один и тот же код для настройки этого представления.

Что я делаю не так?

- РЕДАКТИРОВАТЬ -

ОК Я был не прав относительно выполнения shouldAutorotateToInterfaceOrientation: itвыполняется 3 раза с запросом UIInterfaceOrientationPortrait, 2 раза для UIInterfaceOrientationLandscapeLeft, затем один раз для UIInterfaceOrientationLandscapeRight и еще раз один раз для UIInterfaceOrientationLandscapeLeft.

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

Ответы [ 4 ]

25 голосов
/ 18 октября 2011

Проверьте в своем Info.plist, что массив поддерживаемых ориентаций начинается с портрета (справа вверх). Если оно начинается с любой другой ориентации, ваше приложение будет запускаться в этой ориентации.

2 голосов
/ 12 февраля 2012

У меня была такая же проблема, и мне было грустно видеть, что она осталась без ответа.Затем я понял одну ключевую вещь, которая доказывает, что именно так все и работает: образ запуска Default.png также перевернут.Вы ничего не можете сделать в своем приложении, чтобы это исправить.Вы можете выбрать, какой режим пейзажа запускается правильно (кнопка «Домой» слева или справа), но вы не можете заставить их ОБА работать.

1 голос
/ 05 ноября 2011

Нашли решение!

Очевидно, есть ошибка в Интерфейсном Разработчике. Если вы просто отключите все ориентации, а затем снова включите их в нужном порядке, инфо-список будет построен правильно.

0 голосов
/ 04 января 2012

В моем случае это сработало, как сказал tgunr, НО мне пришлось удалить из папки симулятора все приложение, иначе изменение ориентации не сработало.

...