iPhone app no ​​modo paisagem, 2008 sistemas

votos
88

Nota: esta pergunta é a partir de 2008 e agora é de apenas interesse histórico.


Qual é a melhor maneira de criar um aplicativo para iPhone que é executado em modo paisagem desde o início, independentemente da posição do dispositivo?

Ambos programaticamente e usando o Construtor de Interface.

Publicado 02/08/2008 em 11:47
fonte usuário
Em outras línguas...                            


8 respostas

votos
46

resposta histórica única. Espetacularmente fora da data:

Por favor, note que esta resposta é agora extremamente desatualizado.

Este post é apenas uma curiosidade histórica .


Notícia emocionante! Como descoberto por Andrew abaixo, este problema foi corrigido pela Apple em 4.0+.

Parece que já não é necessário forçar o tamanho da vista em cada vista, e o grave problema específico da paisagem "trabalhando apenas na primeira vez" foi resolvido.

Em abril de 2011, não é possível testar ou até mesmo construir qualquer coisa abaixo de 4.0, então a questão é puramente uma curiosidade histórica. É incrível o quanto o problema que causou desenvolvedores por tanto tempo!


Aqui é a discussão original e solução. Isso é totalmente irrelevante agora, como esses sistemas não são ainda operável.


É extremamente difícil fazer este trabalho totalmente - há pelo menos três problemas / erros em jogo.

tente isso .. design de interface builder paisagem

Note em particular que onde diz "e você precisa usar shouldAutorotateToInterfaceOrientation adequadamente em todos os lugares" isso significa que em todos os lugares, todos os seus pontos de vista em tela cheia.

Espero que ajude nesse pesadelo!

Um lembrete importante do ADICIONAIS problema bem conhecido na mão aqui: se você está tentando trocar entre MAIS DE UM vista (todos paisagem), ele simplesmente NÃO FUNCIONA . É essencial lembrar isso ou você vai perder dias sobre o problema. Ele não é literalmente POSSÍVEL. É o maior aberto, conhecido, bug na plataforma iOS. Literalmente, não há maneira de fazer o hardware fazer a segunda vista você carrega, não paisagem. A solução chato, mas simples, e que você deve fazer, é ter um UIViewController mestre trivial que não faz nada, mas se sentar lá e deixar você alternar entre os seus pontos de vista.

Em outras palavras, no iOS por causa de um erro grave saber:

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

Você pode fazer isso apenas uma vez . Mais tarde, se você tentar remover happyThing.view e, em vez colocar lá newThing.view, ele não funciona - e é isso. A máquina nunca vai girar a vista para paisagem. Não há nenhuma solução truque, até mesmo a Apple não pode fazê-lo funcionar. A solução você deve adotar está tendo um UIViewController geral que simplesmente se senta lá e só detém seus vários pontos de vista (happyThing, newThing, etc). Espero que ajude!

Respondeu 27/03/2010 em 22:13
fonte usuário

votos
40

A partir do Dev site Apple:

Para iniciar o aplicativo no modo paisagem para que a barra de status está na posição apropriada de imediato, editar o arquivo Info.plist para adicionar a chave UIInterfaceOrientation com o valor apropriado (UIInterfaceOrientationLandscapeRight ou UIInterfaceOrientationLandscapeLeft), como mostrado na Listagem 2.

Listagem 2: Iniciando seu aplicativo no modo paisagem

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Respondeu 31/08/2008 em 15:38
fonte usuário

votos
27

Resumo e integração de todas as mensagens, após testá-lo eu mesmo; verificar a atualização para 4.x, 5.x abaixo.

Como de 3,2 você não pode alterar a orientação de um aplicativo em execução a partir do código.

Mas você pode começar uma aplicação com uma orientação fixa, apesar de fazê-lo, isso não é simples.

Experimente com esta receita:

  1. definir a sua orientação para UISupportedInterfaceOrientationsno Info.plistarquivo
  2. na sua janela de definir um "controlador de vista base" 480x320. Todas as outras vistas será adicionado como um subview de seu ponto de vista.
  3. em todos os controladores de vista configurar o shouldAutorotateToInterfaceOrientation:método (para retornar o mesmo valor definido no plist, é claro)
  4. em todos os controladores de vista definir uma vista de fundo com

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

    no viewDidLoadmétodo.

Update (iOS 4.x, 5.x) : Guia de Programação do Apple iOS App tem um "Iniciando no modo paisagem" parágrafo no "Advanced App Tricks" capítulo.

Referências:

Respondeu 07/05/2010 em 12:02
fonte usuário

votos
7

Primeiro eu definido em info.plist

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

então eu colocar esse código em 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)]; 

Dessa forma eu posso trabalhar na vista no Interface Builder no modo paisagem.

Respondeu 20/11/2009 em 21:58
fonte usuário

votos
6

A resposta de de sasb e michaelpryor parece estar correta, mas se ele não está funcionando para você, tente esta alternativa:

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

Ou esta:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Ou esta:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Você também pode ter que chamar window makeKeyAndVisible;primeiro.

Alguns links: Desenvolver no modo paisagem , iPhone SDK: Como forçar o modo paisagem única?

@ Robert: consulte O iPhone SDK, NDA, e Stack Overflow .

Respondeu 31/08/2008 em 16:01
fonte usuário

votos
5

Estou surpreso que ninguém veio acima com esta resposta ainda:

Em todos os testes, quando um dispensando um controlador de vista modal orientação preferida do ponto de vista do controlador pai configurado em shouldAutorotateToInterfaceOrientationé respeitado, mesmo quando parte de um UINavigationController. Portanto, a solução para isso é simples:

Criar um UIViewController manequim com um UIImageView para um fundo. Definir a imagem à imagem Default.png seu aplicativo usa na inicialização.

Quando viewWillAppearé chamado em seu controlador de visualização raiz, basta apresentar o controlador de vista manequim sem animação.

quando viewDidAppearé chamado em seu controlador de exibição manequim, demitir o controlador de vista com um bom cruzamento dissolver animação.

Não só este trabalho, mas parece bom! BTW, apenas para esclarecimento eu faço a exibição de raiz controlador de viewWillAppearcomo este:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
Respondeu 27/11/2010 em 08:38
fonte usuário

votos
4

O Guia de programação mais recente iPhone OS tem uma seção completa sobre este assunto, com código de exemplo. Estou certo de que esta é uma adição recente, então talvez você perdeu. Ele explica todas as condições que têm de cumprir; basicamente...

  • definir as propriedades Info.plist (isto muda a posição da barra de estado, mas não o ponto de vista)
  • girar sua visão manualmente em torno de seu centro, em ambos o seu UIViewController viewDidLoad: método ou o seu applicationDidFinishLaunching: método ou implementar rotação automática ( "redimensionamento automático comportamentos", página 124)

Procure por "O lançamento no modo paisagem", página 102.

Respondeu 04/09/2008 em 22:57
fonte usuário

votos
3

Veja esta resposta: modo paisagem SOMENTE para iPhone ou iPad

  1. adicionar orientação para Plist
  2. shouldAutorotateToInterfaceOrientation = YES em todos os arquivos

Embora se você estiver usando modos mistos, você pode ser melhor fora com

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Respondeu 06/03/2011 em 08:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more