Existe uma maneira de converter o sistema de coordenadas depois de uma mudança para a orientação horizontal?

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

  •  23-08-2019
  •  | 
  •  

Pergunta

Em um aplicativo de iPhone OS baseado em vista, eu mudar a orientação da orientação retrato inicial a um orientação paisagem (UIInterfaceOrientationLandscapeRight). Mas agora o x, y origem (0,0) está no inferior esquerdo canto (em vez dos habituais superior esquerda) e cada vez que eu quero fazer algo que envolve coordenadas devo re- calcular para compensar o novo sistema de coordenadas. Eu também tenho notado que meus pontos de vista dentro do novo sistema de coordenadas não estão se comportando normalmente, às vezes. Assim, há uma maneira de converter o sistema de coordenadas ONCE, logo depois de eu mudar a orientação, para que eu possa manter o pensamento dos meus coordenadas como tendo uma origem no superior esquerda esquina?

Foi útil?

Solução

Se você fizer a abordagem recomendada de aplicar uma transformação para a sua vista principal, a fim de girá-lo:

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationLandscapeRight) 
{
    CGAffineTransform transform = primaryView.transform;

    // Use the status bar frame to determine the center point of the window's content area.
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
    CGRect bounds = CGRectMake(0, 0, statusBarFrame.size.height, statusBarFrame.origin.x);
    CGPoint center = CGPointMake(60.0, bounds.size.height / 2.0);

    // Set the center point of the view to the center point of the window's content area.
    primaryView.center = center;

    // Rotate the view 90 degrees around its new center point.
    transform = CGAffineTransformRotate(transform, (M_PI / 2.0));
    primaryView.transform = transform;
}   

então qualquer subviews que você adiciona a este ponto de vista principal deve usar o padrão do sistema de coordenadas. A transformação que é aplicado para a vista principal cuida de fazer rodar as coordenadas dos subvisualizações, como bem. Isso funciona bem para mim em meu aplicativo.

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