Получение необычного журнала отладки с помощью автоматического поворота с помощью универсального приложения - PullRequest
0 голосов
/ 07 сентября 2011

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

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    if (NSClassFromString(@"UISplitViewController") != nil && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    {
        return YES;
    }
    else
        return NO;
}

В консоли:

The view controller <UINavigationController: 0x1468d0> returned NO from -shouldAutorotateToInterfaceOrientation: for all interface orientations. It should support at least one orientation.

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

В сообщении сказано все:

Он должен поддерживать хотя бы одну ориентацию.

В вашем выражении else, NO возвращается независимо от ориентации. Если NO здесь означает «только портрет», выполните проверку и верните YES для портрета:

else
 return
  (interfaceOrientation == UIInterfaceOrientationPortrait) ?
    YES :
     NO ;

Или более краткая (но менее изящная) версия:

else
  return (interfaceOrientation == UIInterfaceOrientationPortrait);
0 голосов
/ 07 сентября 2011

Я думаю, что ваше if условие всегда терпит неудачу, поэтому вы, вероятно, всегда возвращаете NO, что означает «Я не поддерживаю какую-либо ориентацию», что, очевидно, не соответствует действительности ... Какую самую низкую цель вы хотите поддержать?

Если ваш else должен обрабатывать iPhone / iPod, вы должны вернуть YES хотя бы для одной ориентации:

return (interfaceOrientation == UIInterfaceOrientationPortrait);

Или

return inOrientation == UIDeviceOrientationLandscapeLeft
    || inOrientation == UIDeviceOrientationLandscapeRight
    || inOrientation == UIDeviceOrientationPortrait
    || inOrientation == UIDeviceOrientationPortraitUpsideDown;

, если вы планируете поддерживать все ориентации.

Если вы заботитесь о поддержке версий iOS ниже 3.2 и хотите протестировать их на симуляторе, вы можете изменить свою «проверку iPad» на что-то подобное.

- (BOOL)amIAnIPad {
    // This "trick" allows compiling for iOS < 3.2 and testing on pre 3.2 simulators
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200)
    if ([[UIDevice currentDevice] respondsToSelector: @selector(userInterfaceIdiom)])
        return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad);
#endif
    return NO;
}

Подробнее об этом трюке можно узнать из Блог Джеффа Ламарша .

0 голосов
/ 07 сентября 2011

Я думаю, это означает, что ваше условие if всегда ложно. Всегда должен быть случай, когда вы возвращаете YES для книжной или альбомной ориентации независимо от того, является ли это iPad или у вас есть класс UISplitViewController. Ваш всегда будет возвращать НЕТ для iPhone, например. Начните с чего-то более подобного, а затем, возможно, разрешите пейзажи, только если бла-бла:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
    if (NSClassFromString(@"UISplitViewController") != nil && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    {
        return YES;
    }
    else
    {
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait) || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...