Приложение для iPhone в ландшафтном режиме, системы 2008

Обратите внимание, что этот вопрос относится к 2008 году и в настоящее время представляет только исторический интерес.


Какой лучший способ создать приложение для iPhone, которое запускается в альбомном режиме с самого начала, независимо от положения устройства?

Как программно, так и с помощью Interface Builder.

2.08.2008 10:47:08
Для любых будущих читателей, пожалуйста, обратите внимание, что эта известная проблема теперь решена Apple с 2011 года. Обратите внимание на тестовый проект в ответе ниже.
Fattie 12.06.2011 08:26:13
8 ОТВЕТОВ
РЕШЕНИЕ

Только исторический ответ. Эффектно устарел.

Обратите внимание, что этот ответ сейчас сильно устарел /

Этот ответ - только историческое любопытство .


Волнующие новости! Как обнаружил Эндрю ниже, эта проблема была исправлена ​​Apple в 4.0+.

Казалось бы, больше нет необходимости устанавливать размер представления для каждого представления, и конкретная серьезная проблема ландшафта, «работающего только в первый раз», была решена.

По состоянию на апрель 2011 года невозможно протестировать или даже построить что-либо ниже 4.0, поэтому вопрос является чисто историческим курьезом. Невероятно, сколько неприятностей это доставляло разработчикам так долго!


Вот оригинальное обсуждение и решение. Это совершенно неважно сейчас, так как эти системы даже не работают.


Совершенно сложно сделать эту работу полностью - в игре как минимум три проблемы / ошибки.

попробуйте это .. интерфейс строитель ландшафтный дизайн

Обратите внимание, в частности, на то, что там, где написано «и вам нужно правильно использовать вездеAutorotateToInterfaceOrientation», это означает везде, все ваши полноэкранные представления.

Надеюсь, это поможет в этом кошмаре!

Важное напоминание о ДОПОЛНИТЕЛЬНОЙ известной проблеме, имеющейся здесь: если вы пытаетесь переключиться между режимом «БОЛЬШЕ, ЧЕМ ОДИН» (весь ландшафт), ЭТО ПРОСТО НЕ РАБОТАЕТ . Важно помнить об этом, или вы потратите дни на решение этой проблемы. Это буквально НЕ ВОЗМОЖНО. Это самая большая открытая, известная ошибка на платформе iOS. Буквально нет способа заставить аппарат сделать второй вид, который вы загружаете, быть альбомным. Раздражающий, но простой обходной путь, и то, что вы должны сделать, это иметь тривиальный мастер UIViewController, который ничего не делает, кроме как сидит там и позволяет переключаться между вашими представлениями.

Другими словами, в iOS из-за большой известной ошибки:

[window addSubview:happyThing.view];
[window makeKeyAndVisible];

Вы можете сделать это только один раз . Позже, если вы попытаетесь удалить happyThing.view и вместо этого вставить туда newThing.view, ЭТО НЕ РАБОТАЕТ - И ЭТО ЭТО. Машина никогда не повернет вид на пейзаж. Нет хитрости, даже Apple не может заставить ее работать. Обходной путь, который вы должны принять, - это иметь общий UIViewController, который просто сидит там и просто содержит ваши различные представления (happyThing, newThing и т. Д.). Надеюсь, это поможет!

47
19.06.2019 11:32:27
Я считаю, что это было исправлено в 4.x. Мы выпустили игру с множеством разных экранов, пейзажами и портретами, но она не работала в 3.x. Не желая разбираться в дополнительном фиктивном представлении, мы вместо этого потребовали 4.x, что, вероятно, год спустя после того, как был задан этот вопрос.
AndrewS 24.04.2011 23:10:15
Мы делали не «всегда пейзаж», а по-разному пейзаж или портрет. Каждый VC напрямую добавляется и удаляется из окна. Приложение запускает альбомную ориентацию, выдерживая несколько переходов между экранами. Мы не используем фиктивное представление, но ДЕЙСТВИТЕЛЬНО переопределяем mustAutorotate на каждом экране. Нет проблем на 4.x, от прикосновения к пэду на телефон
AndrewS 27.04.2011 15:34:51

С сайта Apple Dev:

Чтобы запустить приложение в альбомном режиме, чтобы строка состояния сразу находилась в соответствующей позиции, отредактируйте файл Info.plist, добавив ключ UIInterfaceOrientation с соответствующим значением (UIInterfaceOrientationLandscapeRight или UIInterfaceOrientationLandscapeLeft), как показано в листинге 2.

Листинг 2: Запуск приложения в ландшафтном режиме

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
41
31.08.2008 14:38:14
Этот плюс в ваших методах shouldAutorotateToInterfaceOrientation return (interfaceOrientation! = UIInterfaceOrientationPortrait); и вы сделали.
Michael Behan 25.05.2010 12:52:21
Вопрос спрашивает, как запустить устройство в ландшафтном режиме. Ответы дают эту информацию. Ориентация обработки после этого не упоминается в вопросе. +1 Майкл Прайор
ingh.am 24.09.2010 08:06:23
Интересно, что «ответ» фактически НЕ запустит устройство в ландшафтном режиме - !! Это, пожалуй, самая известная ошибка / сложность во всей среде Apple. Это основной для очень работающего разработчика iPad!
Fattie 29.10.2010 10:55:18
@mbehan Существует также UIInterfaceOrientationPortraitUpsideDown, следовательно, это не исправление. Кроме того, UIInterfaceOrientation в .plist поддерживается только на 3.2+, но не на 3.1.3 и более старых устройствах (и помните, что iPhone 2G застрял в этой версии).
Ivan Vučica 10.03.2011 12:22:47

Подведение итогов и интеграция со всех постов, после тестирования сам; проверьте обновление для 4.x, 5.x ниже.

Начиная с версии 3.2 вы не можете изменить ориентацию работающего приложения из кода.

Но вы можете запустить приложение с фиксированной ориентацией, хотя это не так просто.

Попробуйте с этим рецептом:

  1. установить ориентацию UISupportedInterfaceOrientationsв Info.plistфайле
  2. в вашем окне определите 480x320 "базовый контроллер вида". Любое другое представление будет добавлено как подпредставление к его представлению.
  3. во всех контроллерах представления установите shouldAutorotateToInterfaceOrientation:метод (конечно, чтобы вернуть то же значение, которое вы определили в plist)
  4. во всех контроллерах представления установите фоновое представление с

    self.view.frame = CGRectMake(0, 0, 480, 320)

    в viewDidLoadметоде.

Обновление (iOS 4.x, 5.x) : в Руководстве по программированию приложения Apple iOS есть пункт «Запуск в ландшафтном режиме» в главе «Дополнительные хитрости приложений».

Ссылки:

28
18.06.2013 13:52:33
Я могу подтвердить, что это единственное, действительно работающее решение (с небольшим дополнением). Мне потребовались часы, чтобы найти и оценить это. Все остальные ответы являются лишь частичным решением проблемы.
Johannes Rudolph 30.05.2010 10:43:49

Сначала я установил в info.plist

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

затем я помещаю этот код в applicationDidFinishLaunching:

CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];

CGRect contentRect = CGRectMake(0, 0, 480, 320); 
window.bounds = contentRect; 
[window setCenter:CGPointMake(160.0f, 240.0f)]; 

Таким образом, я могу работать с представлением в Интерфейсном Разработчике в альбомном режиме.

8
20.11.2009 20:58:38

Ответ sasb и michaelpryor кажется правильным, но если он не работает для вас, попробуйте эту альтернативу:

- (void)applicationDidFinishLaunchingUIApplication *)application {
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}

Или этот:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Или этот:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Возможно, вам также придется window makeKeyAndVisible;сначала позвонить .

Несколько ссылок: Разработка в ландшафтном режиме , iPhone SDK: Как включить только ландшафтный режим?

@ Роберт: обратитесь к iPhone SDK, NDA и переполнению стека .

7
23.05.2017 10:30:52

Я удивлен, что никто еще не придумал этот ответ:

Во всех моих тестах, когда отклонение модального контроллера представления установило предпочтительную ориентацию родительского контроллера shouldAutorotateToInterfaceOrientationпредставления, даже когда является частью UINavigationController. Таким образом, решение этого просто:

Создайте фиктивный UIViewController с UIImageView для фона. Установите изображение на изображение default.png, которое ваше приложение использует при запуске.

Когда viewWillAppearвызывается в вашем корневом контроллере представления, просто представьте фиктивный контроллер представления без анимации.

когда viewDidAppearвызывается в вашем фиктивном контроллере представления, отклоните контроллер представления с хорошей анимацией перекрестного растворения.

Это не только работает, но и выглядит хорошо! Кстати, просто для пояснения я делаю контроллер корневого представления viewWillAppearследующим образом:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
6
27.11.2010 07:38:02

В последнем Руководстве по программированию для iPhone OS есть полный раздел с образцом кода. Я уверен, что это недавнее дополнение, так что, возможно, вы пропустили его. Это объясняет все условия, которые вы должны соблюдать; в принципе...

  • установить свойства Info.plist (это меняет положение строки состояния, но не вид)
  • поверните представление вручную вокруг его центра, либо в своем UIViewController viewDidLoad: метод, либо в своем applicationDidFinishLaunching: метод или реализуйте автоматическое вращение («Автоматическое изменение размеров», стр. 124)

Ищите «Запуск в ландшафтном режиме», стр. 102.

5
4.09.2008 21:57:05

Смотрите этот ответ: ландшафтный режим только для iPhone или iPad

  1. добавить ориентацию к списку
  2. shouldAutorotateToInterfaceOrientation = YES во всех файлах

Хотя, если вы используете смешанные режимы, вам может быть лучше

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
4
23.05.2017 12:02:32