2011-06-16 10 views
1

Je viens de commencer la programmation de dessin iOS et j'ai découvert que le système de coordonnées est différent de Mac OS X, fondamentalement le point de départ sur iOS est en haut à gauche au lieu de Mac. Je me demande simplement si quelqu'un sait pourquoi Apple a fait ce changement, et cela changera-t-il aussi le futur pour Mac? J'ai également vu sur les docs que le système de coordonnées sur iOS ne peut pas être retourné, donc j'ai besoin de réécrire le code?système de coordonnées ios view

+2

Oui, vous devez ajuster votre code. – PengOne

Répondre

2

Vous avez raison concernant le système de coordonnées. La raison, si je me souviens bien, est que les systèmes de dessin de la plupart des plates-formes utilisent l'angle supérieur gauche comme origine des coordonnées. Mac OS X utilisé en bas à gauche car c'est ce que NeXT a utilisé.

Il ne changera probablement pas sur le Mac à l'avenir, car alors tout le monde devrait réécrire totalement leur code de dessin.

+1

Il était difficile de s'adapter en changeant de windows en mac ... et maintenant je dois y retourner! (criant furieusement) –

1

J'ai trouvé un moyen facile de résoudre ce problème. Au lieu d'utiliser un objet standard CALayer comme couche de base, créez votre propre classe (basé sur CALayer) qui a un seul appel:

- (void)layoutSublayers; 
{ 
    for(sprite* aSprite in self.sublayers) 
    { 
     // -(y pos -1) flips the coordinate system to start in the lower left 
     aSprite.position = CGPointMake(aSprite.actualPosition.x, -(aSprite.actualPosition.y - 1.0)); 
    } 
} 
sprite

est juste une classe CALayer avec une propriété CGPoint ajouté, ActualPosition. Mettez à jour cette valeur pour déplacer l'image-objet.

+0

'-layoutSublayers' est appelé très fréquemment. Sûrement, la deuxième fois que vous l'appelez, vous retournez la position y de chaque couche à la position d'origine à nouveau? –

+0

Oups, j'ai fait une erreur en copiant le code. Je prenais d'autres parties de ces lignes car elles n'étaient pas pertinentes à la question. Je devine un peu d'avance sur moi-même. Actualisé. – charliehorse55