C'è un modo per convertire il sistema di coordinate dopo un cambio di orientamento di paesaggio?

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

  •  23-08-2019
  •  | 
  •  

Domanda

In una vista basata su applicazioni per iPhone OS, posso cambiare l'orientamento del primo orientamento verticale a un orientamento orizzontale (UIInterfaceOrientationLandscapeRight). Ma ora la x, y origine (0,0) si trova nel nell'angolo in basso a sinistra (invece del solito in alto a sinistra), il tempo e ogni voglio fare qualcosa che coinvolge le coordinate devo ri- calcolare per compensare il nuovo sistema di coordinate. Ho anche notato che le mie opinioni all'interno del nuovo sistema di coordinate non si comportano normalmente, a volte. Quindi, c'è un modo per convertire il sistema di coordinate UNA VOLTA, subito dopo ho cambiare l'orientamento, in modo che possa continuare a pensare delle mie coordinate come avente origine nel nell'angolo in alto a sinistra?

È stato utile?

Soluzione

Se si fa l'approccio consigliato di applicare una trasformazione per la visualizzazione principale al fine di ruotarlo:

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;
}   

allora ogni subviews a questo si aggiunge vista principale dovrebbero utilizzare il sistema di coordinate standard. La trasformazione che viene applicato alla vista principale provvede a ruotare le coordinate dei subviews, pure. Questo funziona bene per me nella mia applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top