Estou trabalhando em um aplicativo de jogo de palavras que tem como um de seus controladores de visualização uma grade de palavras cruzadas. O aplicativo é um aplicativo para iPad projetado para ser jogado no meio da mesa com o iPad plano sobre a mesa, então a orientação é definida no aplicativo e nos viewControllers para ser somente retrato. As visualizações são rotacionadas para cada usuário usando transformações quando é a vez deles. Aqui está um exemplo do desenvolvimento inicial. Você vê que os blocos no centro são rotacionados para ficar de frente para o jogador azul. Os outros jogadores também têm um conjunto de blocos orientados para eles.
Se o usuário tocar no ícone de grade, que é apresentado apenas no início do turno, a tela de palavras cruzadas é mostrada (aqui está uma captura de tela de outro jogo):
Se o usuário não puder jogar nenhuma letra, há um botão Descartar que permitirá que as letras sejam descartadas. Gostaria de adicionar um alerta, mas o comportamento padrão do alerta é usar a orientação do dispositivo. Embora seja um aplicativo somente retrato, a interface é girada:
A consequência disso é que, como o restante do aplicativo foi projetado para ser usado somente na orientação retrato, ele agora é girado. Quero evitar isso, mas também gostaria que o alerta fosse orientado para o usuário. Observações importantes: como o iPad ficará deitado, o dispositivo não girará entre os turnos. No entanto, ainda quero que as visualizações girem.
Achei que isso poderia ser alcançado definindo a orientação do dispositivo ou da interface antes de chamar o alerta (possível?), mas não quero que a tela em que o alerta é apresentado gire, o que está acontecendo aqui quando coloco o simulador na orientação paisagem. No jogo real, a orientação seria qualquer orientação que estivesse no lugar por último quando o iPad foi definido como plano, então a visualização poderia girar em qualquer direção. Uma possível solução que pensei foi adicionar o alerta a uma janela separada. A segunda janela pode ter uma orientação diferente? Posso definir a orientação do alertview diretamente?
Ou talvez eu deva escrever meu próprio alertViewController. Essa pode ser a solução mais simples.
Edição: Percebi que não incluí isso no VC de palavras cruzadas, embora estivesse no VC de chamada:
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
override var shouldAutorotate: Bool {
return false
}
Adicionar isso impediu que ele girasse, mas agora o alerta é exibido em retrato, que é o que eu esperava. Em seguida, tentei definir a transformação do alerta programaticamente:
alertViewController.view.transform = self.view.transform
Mas isso não funcionou.
Editar: aqui está um resumo da resposta sugerida, que eu tentei enquanto estava sendo publicada. A UI precisa de alguns ajustes, mas você pode ver aqui que funciona.