Sto avendo un problema che non capisco. Sto sviluppando un'applicazione OpenGL per iOS. Perché in alcuni punti voglio forzare l'orientamento della vista in modo programmatico, e Apple per qualsiasi motivo non lo rende facile (o persino possibile), lo sto facendo a mano.
Ritorna sempre NO in shouldAutoRotateToInterfaceOrientation
, e quando voglio cambiare l'orientamento (in verticale, per esempio), faccio qualcosa di simile in UIView:
[self setTransform:CGAffineTransformMake(1, 0, 0, 1, 0, 0)];
[self setBounds:CGRectMake(0, 0, 768, 1024)];
Funziona bene.
Per supportare i dispositivi Retina, ho iniziato a controllare [UIScreen mainScreen].scale
e a impostare self.contentScaleFactor
di conseguenza. Ho anche modificato il codice sopra per tenere conto delle nuove dimensioni, in questo modo:
[self setTransform:CGAffineTransformMake(1, 0, 0, 1, 0, 0)];
[self setBounds:CGRectMake(0, 0, 2*768, 2*1024)];
Stessa rotazione, dimensioni diverse. Il risultato strano con questo è che ottengo uno "schermo" con le giuste dimensioni, ma ho cancellato metà schermo verso il basso e verso sinistra. Per correggere questo, ho bisogno di fare quanto segue:
[self setTransform:CGAffineTransformMake(1, 0, 0, 1, 0, 0)];
[self setBounds:CGRectMake(-768, -1024, 2*768 - 768, 2*1024 - 1024)];
Funziona, ma è brutto, ho anche bisogno di fare correzioni simili quando ottengo le coordinate touch, e peggio di tutto, non capisco cosa sta succedendo o perché funziona la "correzione" sopra.
Qualcuno può far luce su questo problema?