Animar alterações durante a rotação do dispositivo com base no elemento de tamanho será após a rotação ser concluída
Eu tenho uma configuração dinâmica de botões que se ajustam automaticamente em largura e altura com base nas restrições de layout automático definidas em um storyboard. Quando em retrato, os botões têm larguras e alturas iguais para que o quadro fique perfeitamente quadrado e, quando o dispositivo é girado para paisagem, os botões ficam mais curtos e amplos. Eu arrumeicornerRadius
nas camadas dos botões, para que fiquem perfeitamente circulares quando em retrato, e isso funciona bem, mas quando eu giro para a paisagem, o raio do canto não parece mais certo, obviamente. Eu preciso mudar isso para que fique oval. O problema é que, não importa onde eu tente colocar esse código, não consigo obter a largura e a altura corretas dos botões após a rotação. Quero que isso ocorra enquanto o dispositivo estiver sendo girado - não quero esperar até que a rotação seja concluída. Idealmente, ocornerRadius
animaria a mudança enquanto a transição anima.
Se eu usarviewWillLayoutSubviews
ouviewDidLayoutSubviews
, ele obtém o quadro do botão corretamente quando o aplicativo é iniciado, mas, ao girar para o modo paisagem, esse método é chamado antes que o quadro do botão seja atualizado para a nova orientação, portanto, não consigo calcular o raio correto do canto.
Se eu usarviewWillTransitionToSize:withTransitionCoordinator:
ouwillTransitionToTraitCollection:withTransitionCoordinator:
ouwillRotateToInterfaceOrientation
, ele não é chamado quando o aplicativo é iniciado e, ao girar o dispositivo, ele é chamado antes que o quadro seja atualizado para o novo tamanho.
Se eu usarwillAnimateRotationToInterfaceOrientation
, ele não é chamado quando o aplicativo é iniciado, mas ao girar o dispositivo, ele recebe corretamente o novo quadro de botão. Mas esse método está obsoleto.
Portanto, a pergunta é: qual método você pode usar para definir as propriedades de um botão com base no tamanho que o botão terá quando a rotação for concluída, que é chamada antes que a rotação seja concluída?
Observe que ele precisa ser chamado para todas as alterações de orientação, não apenas as alterações de classe de tamanho (o iPad giratório não altera a classe de tamanho). Eu só preciso dar suporte ao iOS 8.0 ou superior.
Este é o código que estou colocando nos métodos para saber se está obtendo o tamanho correto:
println("\(button.frame.size.width) x \(button.frame.size.height)")