UIDeviceOrientationDidChangeNotification не срабатывает? - PullRequest
2 голосов
/ 29 сентября 2010

Я просто не могу заставить UIDeviceOrientationDidChangeNotification выстрелить.

У меня есть AppDelegate, здесь я добавляю PolyOrientationViewController, который имеет UInavigationController, который может толкать VerticalNavigationController и HorizontalViewController в зависимости от ориентации iPad.

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

    ISPolyOrientationTableViewController *pvc = [[ISPolyOrientationTableViewController alloc] init];
    [window addSubview:pvc.view];
    [pvc release];
    [window makeKeyAndVisible];

    return YES;
}

Поли, Вертикальный и Горизонтальный viewController реализует:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

PolyVC, который является самым верхним ViewController, имеет следующие методы:

- (void)viewDidLoad {

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

    [super viewDidLoad];
}

Имеет функцию, связанную:

- (void)didRotate:(NSNotification *)notification {
    //push the related controller
}

При создании экземпляра PolyVC вызывается метод didRotate:, с этого момента он просто прекращает генерировать UIDeviceOrientationDidChangeNotification, я думаю.

У меня есть точка останова в методе didRotate:, я загрузил приложение на iPad, чтобы убедиться, что это не симулятор, я создал новый проект xcode splitViewController, протестировал вращение, удалил код и вставил свой, я проверил кнопку блокировки ориентации, я попытался реализовать -(BOOL) ShouldAutoRotate…, я не вызывал ни одного, я проверил, что info.plist указывает, что приложение поддерживает все ориентации, я попытался скопировать каждый фрагмент Код уведомления из рабочего примера, который я нашел, чтобы отсеять опечатки.

Я полностью нахожусь в этом уме :) Есть ли что-то, что я мог бы сделать, какой-то способ реализации UIViewController, не используя IB, вложив ViewControllers в ViewControllers (PolyViewController владеет UINavigationController, который владеет Vertical и HorizontalViewController) или что-нибудь, что будет заставить приложение полностью игнорировать интерфейсные уведомления о ориентации?

Я надеюсь, что кто-то может указать на мою ошибку :) Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 14 марта 2011

Извлечено из документации , попробуйте, если это поможет:

Вы можете получить текущую ориентацию, используя свойство ориентации, или получать уведомления об изменениях, зарегистрировавшись для уведомления UIDeviceOrientationDidChangeNotification. Прежде чем использовать любой из этих методов для получения данных об ориентации, необходимо включить доставку данных с помощью метода beginGeneratingDeviceOrientationNotifications. Если вам больше не нужно отслеживать ориентацию устройства, вызовите метод endGeneratingDeviceOrientationNotifications, чтобы отключить доставку уведомлений.

6 голосов
/ 01 июля 2011

Этот симптом (уведомление запускается один раз при инициализации, а затем останавливается) звучит так, как будто вы отключили изменение ориентации в вашем iPhone.Это то, что случилось со мной в любом случае.

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