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


Примечание: этот вопрос с 2008 года и сейчас представляет только исторический интерес.


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

Как программно, так и с помощью построителя интерфейса.

8 92

8 ответов:

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

обратите внимание, что этот ответ теперь очень устарел.

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


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

казалось бы, больше не нужно заставлять размер вида на каждый вид, а конкретная серьезная проблема ландшафта " работает только первый время " было решено.

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


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


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

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

обратите внимание, в частности, что там, где он говорит ", и вы должны использовать shouldAutorotateToInterfaceOrientation правильно везде" это означает везде, все ваши полноэкранные представления.

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

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

другими словами, в iOS из-за крупной ошибки know:

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

вы можете сделать это только один раз. Позже, если вы попытаетесь удалить happyThing.посмотреть, а вместо этого положить туда новую вещь.видать, не работает-и все тут. Машина никогда не будет поворачивать вид на ландшафт. Никакого подвоха исправить, даже Apple не может заставить его работать. Обходной путь, который вы должны принять, имеет общий UIViewController, который просто сидит там и просто придерживается ваших различных взглядов (happyThing, newThing и т. д.). Надеюсь, это поможет!

С сайта Apple Dev:

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

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

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

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

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

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

попробуйте этот рецепт:

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

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

    на viewDidLoad метод.

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

ссылки:

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

таким образом, я могу работать над представлением в Interface Builder в ландшафтном режиме.

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

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

или такой:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

или такой:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

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

несколько ссылок: разработка в ландшафтном режиме,комплекта разработчика ПО iPhone: Как только сила ландшафтном режиме?

@Robert: пожалуйста, обратитесь к iPhone SDK, NDA и стек Переполнение.

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

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

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

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

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

не только это работает, но и выглядит хорошо! Кстати, просто для уточнения я делаю корневой вид контроллера viewWillAppear такой:

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

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

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

найдите "запуск в ландшафтном режиме", стр. 102.

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

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

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

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];