Авто-вращающиеся представления и уведомления интерфейса UIDevice - PullRequest
1 голос
/ 06 мая 2010

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

- (void) orientationChanged: (NSNotification*) notice
{   
    UIDeviceOrientation newIO = [[UIDevice currentDevice] orientation];
    if (!UIDeviceOrientationIsValidInterfaceOrientation(newIO))
        return;
    UIViewController *newCtrl = /* something based on newIO */; 
    [currentController.view removeFromSuperview]; // remove the old view
    [window addSubview newCtrl.view];
    [self setCurrentController:newCtrl];
}

Проблема в том, что новый вид не вращается автоматически. Мой обратный вызов автоматического поворота в классе контроллера выглядит так:

- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) io
{   
    NSString *modes[] = {@"unknown", @"portrait", @"portrait down",
        @"landscape left", @"landscape right"};
    NSLog(@"shouldAutorotateToInterfaceOrientation: %i (%@)", io, modes[io]);
    return YES;
}

Но как бы я ни вращал устройство, в журнале я нахожу следующее:

shouldAutorotateToInterfaceOrientation: 1 (portrait)
shouldAutorotateToInterfaceOrientation: 1 (portrait)

… и willRotateToInterfaceOrientation:duration: вообще не вызывается. Что теперь? Изменение ориентации становится моей наименее любимой частью iPhone SDK… (Я пока не могу проверить код на устройстве, может быть, это ошибка в симуляторе?)


PS. Код подписки выглядит так:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(orientationChanged:)
    name:UIDeviceOrientationDidChangeNotification
    object:nil];

1 Ответ

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

Проблема исчезает, когда я отправляю уведомление после обмена мнениями:

[[NSNotificationCenter defaultCenter]
    postNotificationName:UIDeviceOrientationDidChangeNotification
    object:[UIDevice currentDevice]];

Но мальчик, это отстой. Я все еще приветствую лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...