auto-rotação iPhone apenas em telas específicas em menos de um controlador de navegação

StackOverflow https://stackoverflow.com/questions/1009915

Pergunta

Este é apenas um exemplo do problema básico que estou tendo, então não se preocupe se esta situação soa um inútil pouco;)

Vamos dizer que eu tenho um aplicativo que é principalmente um UINavigationController apenas dois níveis de profundidade. O nível superior é uma tabela com uma lista de nomes de arquivos de imagem, eo segundo nível tem apenas um UIImageView mostrando a imagem para o nome do arquivo que você bateu.

Para um aplicativo como este, alguém sabe uma boa maneira de permitir que a mesa no nível superior para autorotate, mantendo o segundo nível de imagens fixas no modo retrato?

Até agora eu fui capaz de quase chegar lá ... mas quando eu bato um nome de arquivo enquanto estiver no modo paisagem, os slides de imagem em vista da orientação errada mesmo se shouldAutorotateToInterfaceOrientation retorna sim do segundo controlador de vista nível de único retrato modos.

Foi útil?

Solução

O problema é que se você usar a rotação automática de toda a interface do usuário (incluindo a instância UIWindow eu acredito) é rodado.

Qualquer coisa empurrado para o controlador de navegação neste momento será feito na paisagem.

Assim, quando você apertar o ImageView, que é exatamente o que você.

Para chegar a este trabalho, você tem que quer:

  1. Lidar com a rotação da exibição de raiz manualmente (usando uma transformação)
  2. Unrotate a visualização da imagem por -PI / 2 usando uma transformação.

De qualquer forma você tem que executar as transformações manualmente para chegar a este trabalho.

Como uma nota lateral, isso pode ser má concepção UI. Como usuário, eu esperaria que eu drill down para imagens a aparecer até rightside. Mas este é, sem conhecer o contexto exato do seu aplicativo.

Outras dicas

Não havia nenhuma boa maneira de fazer isso no iPhone OS 2.x, mas em 3.0, eles melhoraram dramaticamente.

Em 2.x, o método shouldAutorotateToInterfaceOrientation: delegado só foi obedecida para altera para a orientação, de modo que você deseja obter o comportamento que você descrever: se ele foi rodado em outro controlador de vista, ele ficaria girado através empurra e pops, mesmo se o novo controlador de vista não suportam rotação para que a orientação.

Na 3.0, as pesquisas UINavigationController shouldAutorotateToInterfaceOrientation: em cada impulso ou pop e obedece o que ele retorna a forma como seria de esperar, por exemplo: se você estiver girado atualmente em orientação Paisagem Esquerda, e você empurra uma instância de um controlador de vista que só orientação suportes Retrato via shouldAutorotateToInterfaceOrientation:, ele automaticamente e instantaneamente vira a orientação lógica e slides na nova visão da maneira correta na orientação retrato.

Note que isto irá funcionar apenas em aplicações ligadas contra (e, portanto, requerendo) 3.0. Para aplicações ligadas contra 2.x, ele vai emular o comportamento antigo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top