2011-01-30 3 views
2

Я новичок в 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, так и для навигационного контроллера ориентация установлена ​​в альбомную. Для корневого элемента, в разделе репозитория, «вид» установлен на владельца файла. У меня также есть действие, прикрепленное к представлению (touchUpInside) - я изменил его класс на UIButton, потому что я хотел resignFirstResponder, когда пользователь щелкает в любом месте в фоновом режиме.

Для navigationController в разделе «Резервные точки» отображается соединение с навигационным контроллером с моим appDelegate.

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

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

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

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

+0

Вы не возражаете, разместив скриншот , ваше описание немного неясно. – Moshe

+0

работает на скриншоте ... – pereirap

+0

скриншот размещен на моей странице Google DOCS - вот ссылка: https://docs.google.com/document/d/1kZMPTsqVT6yAdxCa1HPXu0jhZnDa4QOsJ3p9_wqYs5Q/edit?hl=en&authkey=CJf58PEG – pereirap

ответ

1

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

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


//.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)

13

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

Вот скриншот:

enter image description here

Если вы хотите, чтобы повернуть UINavigationController, это займет немного больше работы. См. this similar question for Дополнительная информация.

+0

I сделал это уже. Моя первоначальная ориентация интерфейса установлена ​​на «Пейзаж» (домашняя правая кнопка). – pereirap

+0

Я думаю, что это должен быть поворот в UINavigationController. Я посмотрю на соответствующий вопрос, посмотрим, поможет ли это. Спасибо за внимание, я ценю это. – pereirap

+0

Привет - Я прочитал его, и это не решило проблему. Фактический объект окна в INterface Builder, при двойном щелчке, отображается в портретной ориентации, и когда я пытаюсь изменить размеры в инспекторе размеров, они неактивны, что мешает мне изменять их значения. Моя кишка говорит мне, что мне нужно изменить ширину и высоту объекта окна. Может ли кто-нибудь сказать мне, как я могу это сделать - возможно, программно? – pereirap

0

Прости меня, если я недоразумение, но не это

// 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); 
} 

?

+0

Да, это на самом деле то, с чего я начал, и он сделал то же самое. Затем я изменил его, потому что мне было трудно понять, что на самом деле делает этот метод. Я оставил его таким образом, потому что это имело для меня больше смысла. Но да, это то, что он говорит во всей документации, которую я читаю, поэтому я изменю ее - вы правы, спасибо. – pereirap

+0

Это все еще не решило проблему. – pereirap

+2

Эти два метода делают то же самое. – FreeAsInBeer

Смежные вопросы