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

ios objective-c landscape

66874 просмотра

8 ответа

28918 Репутация автора

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


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

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

Автор: Michiel de Mare Источник Размещён: 02.08.2008 10:47

Ответы (8)


40 плюса

15911 Репутация автора

С сайта Apple Dev:

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

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

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Автор: Michael Pryor Размещён: 31.08.2008 02:38

6 плюса

15403 Репутация автора

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

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

Или этот:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Или этот:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

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

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

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

Автор: Sören Kuklau Размещён: 31.08.2008 03:01

4 плюса

0 Репутация автора

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

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

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

Автор: Miguel A. Friginal Размещён: 04.09.2008 09:57

7 плюса

34987 Репутация автора

Сначала я установил в 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)]; 

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

Автор: samvermette Размещён: 20.11.2009 08:58

46 плюса

20568 Репутация автора

Решение

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

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

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


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

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

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


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


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

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

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

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

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

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

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

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

Автор: Fattie Размещён: 27.03.2010 09:13

27 плюса

6393 Репутация автора

Резюме и интеграция со всех постов, после того, как я сам протестировал; проверьте обновление для 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 есть пункт «Запуск в ландшафтном режиме» в главе «Дополнительные хитрости приложения».

Рекомендации:

Автор: IlDan Размещён: 07.05.2010 11:02

5 плюса

1478 Репутация автора

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

Во всех моих тестах, когда отклонение модального контроллера представления установило предпочтительную ориентацию родительского контроллера 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;
 }
...
}
Автор: Arlen Anderson Размещён: 27.11.2010 07:38

3 плюса

225 Репутация автора

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

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

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

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Автор: nicc Размещён: 06.03.2011 07:56
Вопросы из категории :
32x32