Observe que esta pergunta é de 2008 e agora é de interesse apenas histórico.
Qual é a melhor maneira de criar um aplicativo para iPhone que funcione no modo paisagem desde o início, independentemente da posição do dispositivo?
Ambos programaticamente e usando o Interface Builder.
ios
objective-c
landscape
Michiel de Mare
fonte
fonte
Respostas:
Resposta histórica apenas. Espetacularmente desatualizado.
Observe que esta resposta agora está extremamente desatualizada /
Essa resposta é apenas uma curiosidade histórica .
Notícia emocionante! Conforme descoberto por Andrew abaixo, esse problema foi corrigido pela Apple na versão 4.0+.
Pareceria que NÃO é mais necessário forçar o tamanho da vista em cada vista, e o sério problema específico da paisagem "apenas trabalhando na primeira vez" foi resolvido.
Em abril de 2011, não era possível testar ou mesmo construir nada abaixo de 4.0, então a questão é puramente uma curiosidade histórica. É incrível quantos problemas isso causou aos desenvolvedores por tanto tempo!
Aqui está a discussão e solução originais. Isso é totalmente irrelevante agora, pois esses sistemas nem mesmo são operáveis.
É EXTREMAMENTE DIFÍCIL fazer esse trabalho totalmente - há pelo menos três problemas / bugs em jogo.
tente isso .. interface builder landscape design
Observe em particular que onde diz "e você precisa usar shouldAutorotateToInterfaceOrientation corretamente em todos os lugares" , significa em todos os lugares, todas as suas visualizações em tela cheia.
Espero que ajude neste pesadelo!
Um lembrete importante do problema ADICIONAL bem conhecido em questão aqui: se você está tentando alternar entre MAIS DE UMA vista (toda paisagem), SIMPLESMENTE NÃO FUNCIONA . É fundamental se lembrar disso ou perderá dias com o problema. Literalmente NÃO É POSSÍVEL. É o maior bug aberto e conhecido na plataforma iOS. Literalmente, não há como fazer com que o hardware torne a segunda visualização que você carrega, paisagem. A solução alternativa irritante, mas simples, e o que você deve fazer, é ter um UIViewController mestre trivial que não faz nada além de ficar parado e permitir que você alterne entre suas visualizações.
Em outras palavras, no iOS devido a um grande bug conhecido:
Você pode fazer isso apenas uma vez . Mais tarde, se você tentar remover happyThing.view e, em vez disso, inserir newThing.view, ISSO NÃO FUNCIONA - E ISSO É ISSO. A máquina nunca girará a vista para a paisagem. Não há conserto de truques, nem mesmo a Apple consegue fazer funcionar. A solução alternativa que você deve adotar é ter um UIViewController geral que simplesmente fique lá e mantenha suas várias visualizações (happyThing, newThing, etc). Espero que ajude!
fonte
Do site Apple Dev:
fonte
Resumo e integração de todos os posts, depois de testar eu mesmo; verifique a atualização para 4.x, 5.x abaixo.
A partir da versão 3.2, você não pode alterar a orientação de um aplicativo em execução a partir do código.
Mas você pode iniciar um aplicativo com uma orientação fixa, embora isso não seja simples.
Experimente com esta receita:
UISupportedInterfaceOrientations
noInfo.plist
arquivoshouldAutorotateToInterfaceOrientation:
método (para retornar o mesmo valor que você definiu no plist, é claro)em todas as visualizações, os controladores definem uma visualização de fundo com
self.view.frame = CGRectMake(0, 0, 480, 320)
no
viewDidLoad
método.Atualização (iOS 4.x, 5.x) : o Guia de programação de aplicativos Apple iOS tem um parágrafo "Iniciando no modo paisagem" no capítulo "Truques avançados do aplicativo".
Referências:
fonte
Primeiro eu configuro em info.plist
então coloco este código em applicationDidFinishLaunching:
Dessa forma, posso trabalhar na visualização no Interface Builder no modo paisagem.
fonte
A resposta de sasb e michaelpryor parece estar correta, mas se não estiver funcionando para você, tente esta alternativa:
Ou este:
Ou este:
Você também pode ter que ligar
window makeKeyAndVisible;
primeiro.Alguns links: Desenvolvendo no modo paisagem , iPhone SDK: Como forçar apenas o modo Paisagem?
@Robert: consulte O iPhone SDK, NDA e Stack Overflow .
fonte
Estou surpreso que ninguém tenha encontrado esta resposta ainda:
Em todos os meus testes, ao dispensar um controlador de visualização modal, a orientação preferida do controlador de visualização pai definida
shouldAutorotateToInterfaceOrientation
é honrada mesmo quando faz parte de um UINavigationController. Portanto, a solução para isso é simples:Crie um UIViewController fictício com um UIImageView como plano de fundo. Defina a imagem como a imagem default.png que seu aplicativo usa na inicialização.
Quando
viewWillAppear
for chamado em seu controlador de visualização raiz, apenas apresente o controlador de visualização fictício sem animação.quando
viewDidAppear
for chamado em seu controlador de visualização fictício, descarte o controlador de visualização com uma bela animação de dissolução cruzada.Isso não só funciona, mas parece bom! BTW, apenas para esclarecimento, eu faço o controlador de visualização root
viewWillAppear
assim:fonte
O guia de programação do iPhone OS mais recente tem uma seção completa sobre isso, com código de exemplo. Tenho certeza de que esta é uma adição recente, então talvez você tenha perdido. Explica todas as condições que você deve cumprir; basicamente...
Procure "Iniciando no Modo Paisagem", página 102.
fonte
Veja esta resposta: Modo paisagem SOMENTE para iPhone ou iPad
Embora se você estiver usando modos mistos, talvez seja melhor usar
fonte