web-dev-qa-db-fra.com

Limites vs trame de NSView

Quelle est la différence entre les limites et le cadre? En fait, pourquoi existe-t-il même des "limites"? La taille des "limites" est égale à la taille du cadre, et l'origine de la limite doit toujours être 0,0.

43
David

Dans le View and Window Architecture Guide de programmation pour iOS:

Un objet vue suit sa taille et son emplacement à l'aide de ses propriétés de cadre, de limites et de centre:

La propriété frame contient le rectangle du cadre, qui spécifie la taille et l'emplacement de la vue dans le système de coordonnées de sa vue d'ensemble.

La propriété limites contient le rectangle des limites, qui spécifie la taille de la vue (et son origine du contenu) dans le propre système de coordonnées locales de la vue.

La propriété center contient le point central connu de la vue dans le système de coordonnées de la vue d'ensemble.

Voici une bonne visualisation de cette explication:

enter image description here

91
Dan

L'origine de la borne n'est pas toujours 0,0. Il est facile de comprendre la différence entre le cadre et les limites, si vous regardez comment modifier la propriété des limites de UIScrollView pendant le défilement.

Par exemple, vous avez UIScrollView avec un cadre (0, 0, 320, 460), des limites (0, 0, 320, 460) et ContentSize (640, 460). Son cadre sera toujours (0, 0, 320, 460), mais la coordonnée X des limites changera en fonction de la distance de défilement.

Cela peut être utile si vous voulez changer quelque chose dans votre UIScrollView (créer et supprimer des pages de manière dynamique par exemple), donc vous voulez connaître la distance de défilement.

9
tagirkaZ

Les documents Apple dans la première réponse ne couvrent pas ce qui arrive au cadre et aux limites après une rotation en orientation paysage. Donc, pour être plus complet, vous devez savoir que le cadre de la fenêtre et la vue racine ne change pas après la rotation, mais les limites changent. Voir cet article pour un peu plus de détails et soyez prudent en utilisant le cadre comme référence pour autre chose que l'orientation portrait.

De l'article:

Si votre contrôleur de vue possède la vue de niveau supérieur sans fenêtre (c'est-à-dire qu'il s'agit du contrôleur de vue le plus bas), alors

self.frame

est toujours en orientation portrait. Quoi? Oui, toujours en mode portrait - ce qui change, c'est la transformation de votre vision. Alors votre

self.bounds

est toujours précis (en gardant à l'esprit le dernier point), mais

self.frame

peut ou non donner le rapport hauteur/largeur que l'utilisateur voit réellement, car le cadre de chaque vue est signalé en termes de coordonnées de la vue d'ensemble et prend en compte toutes les transformations appliquées à la vue.

8
Jim

Un cadre de vues correspond à la taille d'un rectangle dans lequel il peut s'intégrer complètement. Il semble toujours que les limites et le cadre soient identiques, mais ce n'est pas le cas. Considérons un carré qui est juste tourné d'environ 45 degrés!

Ici, le cadre de ce carré pivoté sera le rectangle pour le remplir complètement et il différera donc des limites de cet objet.

P.S principalement dans les objets et les cadres pivotés ont tendance à différer.

1
Maddiee

le cadre est des valeurs de coordonnées dans le système de coordonnées de la super vue

limites est utilisé par le système de dessin pour dessiner le contenu de la vue, lorsque le dessin est terminé, le système utilisera une opération de transformation pour affecter le contenu au cadre de la vue

0
0oneo