Question

j'ai un CGRect; Puis-je transférer ses coordonnées pour être dans le système de coordonnées utilisateur, c'est-à-dire le coin inférieur gauche en haut au lieu du coin supérieur gauche en bas. Existe-t-il une méthode prédéfinie pour cela ou dois-je la calculer manuellement? Merci d'avance.

Était-ce utile?

La solution

Pour convertir un rectangle d'un système de coordonnées qui a son origine en bas à gauche (appelons-le simplement le système de coordonnées traditionnel pour lui donner un nom) à un système où l'origine est en haut à gauche (système de coordonnées iPhone), vous devez connaître le Taille de la vue où le CGRect est, puisque la vue est la référence pour le rectangle.

Par exemple, disons que vous avez une vue avec une taille 200 x 300 et le CGRect tu as c'est CGRectMake(10, 20, 30, 40). La taille du CGRect restera le même. Tout ce qui changera est l'origine - en fait, seule la coordonnée Y changera et non la coordonnée X, car les systèmes de coordonnées traditionnels et iPhone commencent tous deux sur le côté gauche (l'un en bas à gauche; l'autre en haut à gauche).

Alors nous aurons quelque chose comme CGRectMake(10, y, 30, 40).

  - (CGRect)rectangle:(CGRect)oldRect fromTraditionalToiPhoneCoordinatesWithReferenceViewOfSize:(CGSize)aSize
     {
      CGFloat oldY = oldRect.origin.y;  // This is the old y measured from the bottom left. 
      CGFloat newY = aSize.height - oldY - oldRect.size.height;

      CGRect newRect = oldRect;
      newRect.origin.y = newY;

      return newRect;
     }

Le nouveau rectangle, mesuré à partir d'un système de coordonnées iPhone (haut à gauche), serait: CGRectMake(10, 300 - 20 - 40, 30, 40) = CGRectMake(10, 240, 30, 40).

J'espère que cette image le rend plus clairHopefully this image makes it clearer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top