Question Pourquoi existe-t-il un rectangle de cadre et un rectangle de limites dans un UIView?


Bien que ce soit tard dans la nuit noire, je ne comprends pas pourquoi il existe deux rectangles différents: frame et bounds.

Comme je le comprends, un seul rectangle aurait suffi à tout faire. Positionner la vue elle-même par rapport à un autre système de coordonnées, puis en tronquant le contenu à une taille spécifiée. Que feriez-vous d'autre avec deux rectangles? Et comment interagissent-ils les uns avec les autres?

Est-ce que quelqu'un a une bonne explication? Celui des Apple Docs avec l'enfant tenant le fruit n'est pas très bon pour comprendre.


41
2018-04-14 22:11


origine


Réponses:


Voici la feuille de calcul:

  • frame est où la vue est (en ce qui concerne la superview)
  • bounds est où la vue est autorisé à dessiner (par rapport à lui-même)

Quelques précisions supplémentaires:

Si vous positionnez la vue dans sa vue supérieure, vous modifiez presque toujours l'origine de l'image.

Si vous écrasez l'endroit où UIView dessine, vous modifiez presque toujours ses limites.

Notez que vous êtes autorisé à avoir des limites plus grandes que le cadre. C'est-à-dire que vous pouvez dessiner "en dehors des lignes" de l'endroit où vous vous trouvez.


82
2018-04-15 00:35



Le cadre est dans le système de coordonnées de la superview, les bornes sont dans le système de coordonnées de la vue. De mon point de vue, il est pratique d'avoir les deux. Le cadre semble être le plus utile des deux, à moins qu'il y ait des cas où je ne suis pas au courant de l'endroit où une sous-vue peut avoir un système de coordonnées complètement différent (par exemple, les pixels mis à l'échelle).


5
2018-04-14 22:43



J'ai eu des problèmes avec les bornes ces derniers temps et j'ai fait des expériences. La propriété bounds limite la zone où UIView peut dessiner, mais ne fait pas limiter ses sous-vues. L'autre élément lié aux contrôles est la répartition des événements tactiles. Autant que je sache, une vue ne recevra pas d’événements tactiles hors de ses limites. De plus, toute sous-vue en dehors des limites de la vue parent ne recevra pas non plus d'événements tactiles. Dans ces situations, vous devez mettre à jour de manière méticuleuse les limites de la vue du conteneur à mesure que la taille et la position de ses sous-vues changent. Tout ira toujours très bien (car les sous-vues ne sont pas coupées par les limites de leur parent) mais les touches ne seront pas reçues.

(Cela devrait vraiment être une réponse à un article précédent, mais comme je ne peux pas encore répondre, il est bloqué ici ...)


2
2018-02-17 17:46