Ориентация при запуске неверна - PullRequest
2 голосов
/ 30 января 2011

Я новичок в StackOverflow, а также плохо знаком с целью-c.

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

У меня проблема с вращением контроллера "rootView".Он должен отображаться в альбомной ориентации (что и было, прежде чем я решил использовать навигационный контроллер).Симулятор отображается в правильной ориентации, но он загрузил изображение, повернутое на 90 градусов влево, так что текст читается снизу вверх, вбок, так что вам придется наклонить голову влево.Самая левая часть вида видна, но остальная часть вида выходит за верхнюю часть экрана.Это большая программа (я нахожу это, в общем, с целью-c, но тем не менее наслаждаюсь ею ...), но вот суть того, что я считаю важными областями кода:

ВappDelegate, я создаю окно, мой rootViewcontroller и navcontroller:

// .h file:
UIWindow *window;
wordHelper3ViewController *viewController;
UINavigationController *navigationController;

Затем в реализации:

//.m file
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    // Hide status bar
    application.statusBarHidden = YES;
        // --- Add the view controller's view to the window and display.
    [window addSubview:viewController.view];
    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];
    return YES;
}

Затем я освобождаю все это в dealloc.

В своем корневом представлении я делаю это:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    if (interfaceOrientation == UIInterfaceOrientationLandscapeRight){
        return YES;
    } else {
        return NO;
    }
}

Я реализовал следующее, чтобы увидеть, что происходит, и сразу же получаю сообщение журнала при запуске:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    if (fromInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || fromInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        NSLog(@"didRotate...");
    }
}

Кроме этого, я не думаю, что я делаю что-то в своем коде, что должно повлиять на представление (я).Теперь перейдем к InterfaceBuilder:

В инспекторе атрибутов для rootView и контроллера навигации ориентация установлена ​​в альбомную ориентацию.Для rootView при ссылке на выходы «view» устанавливается как владелец файла.У меня также есть действие, прикрепленное к представлению (touchUpInside) - я изменил его класс на UIButton, потому что я хотел resignFirstResponder, когда пользователь щелкает в любом месте фона.

Для элемента navigationController в разделе «Ссылки на выходы» показано подключение контроллера Navigation к моему appDelegate.

В главном окне xib в списке отображается навигационный контроллер, а контроллер представления отображается как его подпредставление.

Viewcontroller также отображается сам по себе, в списке объектов главного окна.

Единственное, что выделяется для меня, это то, что когда я дважды щелкаю на объекте окна, ИТ-служба приходитвизуально в портретном режиме.

У кого-нибудь есть идеи?

Ответы [ 3 ]

13 голосов
/ 30 января 2011

Если вы хотите, чтобы ориентация при запуске отличалась от исходного портретного режима, вам нужно отредактировать файл info.plist.Добавьте запись для «начальной ориентации интерфейса» и установите желаемое значение.

Вот снимок экрана:

enter image description here

Если вы хотите повернуть UINavigationController,это займет немного больше работы.См. этот похожий вопрос для дополнительной информации.

1 голос
/ 11 марта 2011

Я думаю, что ваша проблема в том, что вы добавляете свой контроллер навигации в качестве подпредставления в окно, а уведомления об ориентации отправляются только в первое подпредставление в «окне».

Попробуйте вместо этого.


//.m file
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    // Hide status bar
    application.statusBarHidden = YES;
        // --- Add the view controller's view to the window and display.
    [window addSubview:viewController.view];
    [viewController.view addSubview:navigationController.view];
    [window makeKeyAndVisible];
    return YES;
}

Это раздражает, но я решил проблемы с ориентацией, только каждый имел одно подпредставление в «окне», а затем контролировал все через это одно подпредставление (в данном случае viewController)

0 голосов
/ 31 января 2011

Простите, если я неправильно понимаю, но не должен ли это

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    if (interfaceOrientation == UIInterfaceOrientationLandscapeRight){
        return YES;
    } else {
        return NO;
    }
}

действительно будь этим

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

...