Почему настройки UISupportedInterfaceOrientations не влияют на поведение UIViewController? - PullRequest
1 голос
/ 10 июня 2011

Xcode (4) выделяет настройки UISupportedInterfaceOrientations, но, независимо от того, как я их установил, они не влияют на функциональность основного приложения. Внедрение зашифрованных шаблонов Xcode для поддержки программной отчетности в:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

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

Почему это не реализация по умолчанию? Я что-то пропустил, и этот код не нужен? (Какие-нибудь улучшения кто-нибудь может предложить?) Я мог бы превратить это в категорию для UIViewController

/**
 * This implementation coordinates the app's orientation support with the app
 * bundle settings, simplifying the configuration of the app's support for its
 * different orientations. 
 */
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    static NSString *_orientationFlagNames[] = {
        Nil,                                        // UIDeviceOrientationUnknown
        @"UIInterfaceOrientationPortrait",          // UIDeviceOrientationPortrait,
        @"UIInterfaceOrientationPortraitUpsideDown",// UIDeviceOrientationPortraitUpsideDown,
        @"UIInterfaceOrientationLandscapeRight",    // UIDeviceOrientationLandscapeLeft [sic]
        @"UIInterfaceOrientationLandscapeLeft"      // UIDeviceOrientationLandscapeRight [sic]
                                                    // UIDeviceOrientationFaceUp
                                                    // UIDeviceOrientationFaceDown
    };

    NSArray *supportedOrientation = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"];

    BOOL shouldRotate = (interfaceOrientation < sizeof(_orientationFlagNames)/sizeof(NSString*)
        && [supportedOrientation containsObject:_orientationFlagNames[interfaceOrientation]]);
    return shouldRotate; 
}

1 Ответ

1 голос
/ 10 июня 2011

Я думаю, что здесь есть различие. Значение info.plist указывает ориентации, которые поддерживает приложение, тогда как shouldAutorotateToInterfaceOrientation: указывает ориентации, в которых доступен конкретный вид.

Если вы посмотрите here, то ясно, что значения info.plist помогают iOS выбрать начальную ориентацию для запуска приложения.

...