Cacao: Quelle est la différence entre le cadre et les limites?
UIView
et de ses sous-classes ont toutes les propriétés frame
et bounds
. Quelle est la différence?
- La compréhension image macoscope.com/blog/understanding-frame
- pour moi la plus concise explication est ici: videos.raywenderlich.com/courses/99-scroll-view-school/lessons/...
- Il n'y a rien concise à environ 2:30 de la vidéo. Je peux lire une phrase ou deux beaucoup plus rapide que 2:30.
- Pour moi, c'est beaucoup plus clair si je pense que de cette façon: Frame = Limites & Position
Vous devez vous connecter pour publier un commentaire.
La limites d'un UIView est le rectangle, exprimée en position (x,y) et la taille (largeur,hauteur) par rapport à son propre système de coordonnées (0,0).
La cadre d'un UIView est le rectangle, exprimée en position (x,y) et la taille (largeur,hauteur) par rapport à la superview elle est contenue à l'intérieur.
Alors, imaginez un point de vue qui a une taille de 100x100 (largeur x hauteur) positionné à 25,25 (x,y) de ses superview. Le code suivant affiche ce point de vue de limites et le cadre:
Et la sortie de ce code est:
Donc, nous pouvons voir que dans les deux cas, la largeur et la hauteur de la vue est la même, peu importe si nous sommes à la recherche à des limites ou le cadre. Ce qui est différent est la x,y de positionnement de la vue. Dans le cas de l'limites, les coordonnées x et y sont à 0,0 que ces coordonnées sont relatives à l'affichage lui-même. Cependant, le cadre coordonnées x et y sont relatives à la position de la vue dans la vue parent (qui nous l'avons dit plus tôt était à 25,25).
Il y a aussi un belle présentation qui couvre UIViews. Voir les diapositives 1 à 20, qui, non seulement d'expliquer la différence entre les images et les limites mais aussi de montrer des exemples visuels.
Réponse Courte
cadre = vue de l'emplacement et de la taille à l'aide de la parent de la vue du système de coordonnées
limites = vue de l'emplacement et de la taille à l'aide de son propre système de coordonnées
Réponse Détaillée
Pour m'aider à me rappeler cadre, je pense un cadre photo sur un mur. Le cadre photo est comme la frontière de vue. Je peux accrocher la photo où je veux sur le mur. De la même manière, je peux mettre une vue d'où je veux à l'intérieur d'un parent de la vue (aussi appelé superview). La vue parent, c'est comme le mur. L'origine du système de coordonnées dans iOS est en haut à gauche. Nous pouvons mettre notre point de vue à l'origine de la superview par paramétrage de l'affichage du bloc de coordonnées x-y (0, 0), qui est comme la pendaison de notre image dans le très haut et à gauche du mur. Pour le déplacer à droite, augmentation de x, pour le faire descendre augmentation de y.
Pour m'aider à me rappeler limites, je pense un terrain de basket où, parfois, le basket-ball est frappé en dehors des limites. Vous êtes dribbler le ballon sur tout le terrain de basket, mais vous n'avez pas vraiment où la cour elle-même. Il pourrait être dans une salle de gym ou à l'extérieur, à l'école secondaire, ou en face de votre maison. Il n'a pas d'importance. Vous voulez juste jouer au basket. De la même manière, le système de coordonnées de vue de limites se soucie uniquement de la vue elle-même. Il ne sait rien au sujet d'où la vue est situé dans la vue parent. Les limites origine (point (0, 0) par défaut) est le coin supérieur gauche de la vue. Tous les sous-vues que ce point de vue a sont énoncées en ce qui concerne ce point. C'est comme prendre le basket-ball à l'avant gauche de la cour.
Maintenant la confusion vient lorsque vous essayez de comparer de cadre et de limites. Il en fait n'est pas aussi mauvaise qu'il n'y parait au premier abord, cependant. Nous allons utiliser quelques photos pour nous aider à comprendre.
Cadre vs Limites
Dans la première photo, sur la gauche, nous avons un point de vue qui est situé en haut à gauche de la vue parente. Le rectangle jaune représente le point de vue de l'image. Sur la droite, nous voyons le point de vue nouveau, mais cette fois la vue parent n'est pas montré. C'est parce que les limites ne sais pas à propos de la vue parent. Le rectangle vert représente le point de vue de limites. Le red dot dans les deux images représente le origine de l'image ou de limites.
De sorte que le cadre et les limites ont été exactement la même que l'image. Regardons un exemple de cas où elles sont différentes.
De sorte que vous pouvez voir que le fait de changer les coordonnées x et y de l'image se déplace dans la vue parent. Mais le contenu de la vue elle-même semble toujours exactement la même. Les limites n'ont aucune idée que quelque chose est différent.
Jusqu'à maintenant, la largeur et la hauteur à la fois le cadre et les limites ont été exactement la même. Ce n'est pas toujours vrai, cependant. Regardez ce qui se passe si nous pivoter la vue 20 degrés dans le sens horaire. (La Rotation est effectuée à l'aide de transformations. Voir le la documentation et ces vue et couche exemples pour plus d'informations.)
Vous pouvez voir que les limites sont toujours les mêmes. Ils ne savent toujours pas tout ce qui s'est passé! Le cadre des valeurs ont changé, cependant.
Maintenant, il est un peu plus facile de voir la différence entre le cadre et les limites, n'est-ce pas? L'article Vous N'aurez Probablement pas Comprendre les cadres et les limites définit un point de vue image comme
Il est important de noter que si vous transformez vue, le cadre devient indéfini. Donc en fait, le cadre jaune que j'ai dessiné autour de la rotation de vert de limites dans l'image ci-dessus n'a jamais existe. Cela signifie que si vous faites pivoter, redimensionner ou faire autre transformation, alors vous ne devriez pas utiliser le cadre des valeurs de plus. Vous pouvez toujours utiliser les limites des valeurs, si. La Pomme docs en garde:
Plutôt malheureux, sur le d'un redimensionnement automatique.... Il y a quelque chose que vous pouvez faire, cependant.
La Pomme docs de l'état:
Donc si vous avez besoin de déplacer un point de vue autour de la mère, après une transformation qui a été fait, vous pouvez le faire en modifiant le
view.center
coordonnées. Commeframe
,center
utilise le système de coordonnées de la vue parent.Ok, débarrassons-nous de notre rotation, et de se concentrer sur les limites. Jusqu'à présent les limites de l'origine qui est toujours resté à (0, 0). Il n'est pas nécessaire, cependant. Que faire si notre point de vue a un grand sous-vue qui est trop grand pour afficher tous à la fois? Nous allons faire un
UIImageView
avec une grande image. Voici notre deuxième image à partir de ci-dessus à nouveau, mais cette fois nous pouvons voir ce que l'ensemble du contenu de notre point de vue de la sous-vue ressemblerait.Seulement le coin supérieur gauche de l'image peut s'adapter à l'intérieur de la vue de limites. Maintenant, regardez ce qui se passe si on change les limites " de l'origine des coordonnées.
Le cadre n'a pas été déplacé dans le superview, mais le contenu à l'intérieur du cadre a changé parce que l'origine de l'limites rectangle commence à une partie différente de la vue. C'est l'idée derrière une
UIScrollView
et il est sous-classes (par exemple, unUITableView
). Voir La Compréhension UIScrollView pour plus d'explication.Quand utiliser le cadre et quand utiliser les limites
Depuis
frame
concerne un point de vue de l'emplacement de sa vue parent, vous l'utilisez lorsque vous faites changements extérieurs, comme le changement de sa largeur ou de trouver la distance entre la vue et le haut de la vue parente.Utiliser le
bounds
lorsque vous faites vers l'intérieur les changements, comme le dessin des choses ou de l'organisation des sous-vues au sein de la vue. Également utiliser le terrain pour obtenir la taille de la vue si vous avez fait quelques transfomation sur elle.Des Articles pour la recherche:
Apple docs
Liées StackOverflow questions
D'autres ressources
Pratiquer vous-même
En plus de lire les articles ci-dessus, il m'aide beaucoup pour faire une application de test. Vous voudrez peut-être essayer de faire quelque chose de similaire. (J'ai eu l'idée de ce cours vidéo mais malheureusement, il n'est pas libre).
Voici le code pour votre référence:
bounds
vsframe
de vue.essayez d'exécuter le code ci-dessous
la sortie de ce code est:
cas de l'appareil orientation Portrait
cas de l'appareil orientation Paysage
évidemment, vous pouvez voir la différence entre le cadre et les limites
La cadre est le rectangle qui définit la UIView avec l'égard de ses superview.
La limites rect est la plage de valeurs qui définissent NSView du système de coordonnées.
c'est à dire quoi que ce soit dans ce rectangle sera afficher dans le UIView.
cadre est à l'origine (en haut à gauche) et de la taille de la vue dans son super vue du système de coordonnées , cela signifie que vous pouvez traduire le point de vue dans son super vue en changeant l'image d'origine , limites sur l'autre main est la taille et l'origine de son propre système de coordonnées , de sorte que, par défaut, les limites de l'origine est (0,0).
la plupart du temps, le cadre et les limites sont congruents , mais si vous avez une vue de trame ((140,65),(200,250)) et les limites ((0,0),(200,250))par exemple, et la vue était incliné de sorte qu'il se dresse sur son coin inférieur droit , puis les limites seront toujours ((0,0),(200,250)) , mais le cadre n'est pas .
le cadre sera le plus petit rectangle qui encapsule/entoure la vue , de sorte que le cadre (comme sur la photo) sera ((140,65),(320,320)).
une autre différence est, par exemple, si vous avez un superView dont les limites ((0,0),(200,200)) et ce superView a une sous-vue dont la trame est ((20,20),(100,100)) et que vous avez modifié le superView limites de ((20,20),(200,200)) , ensuite, la sous-vue image sera toujours ((20,20),(100,100)) mais offseted par (20,20) en raison de ses superview système de coordonnées a été offseted par (20,20).
j'espère que cela aide quelqu'un.
subView
cadre est relative à lasuperView
. la modification de lasuperView
limites à tout, ne fera pas lesubView
origine coïncide avecsuperView
.Cadre de son par rapport à son SuperView alors que les Limites par rapport à son NSView.
Exemple:X=40,Y=60.Contient également 3 points de Vue.Ce Schéma vous montre idée claire.
Les réponses ci-dessus ont très bien expliqué la différence entre les Limites et les Cadres.
Ensuite, il ya la confusion que dans le cas de Limites X,Y aura toujours des "0". Ce n'est pas vrai. Ceci peut être compris dans UIScrollView et UICollectionView ainsi.
Lorsque les limites " x, y ne sont pas 0.
Imaginons que nous avons un UIScrollView. Nous avons mis en place la pagination. Le UIScrollView a 3 pages et de son ContentSize la largeur est de trois fois la Largeur de l'Écran (à supposer ScreenWidth est de 320). La hauteur est constante (à supposer 200).
Ajouter trois UIImageViews comme des sous-vues et de garder un œil sur le x valeur de cadre
Page 0:
Lorsque le ScrollView est à 0 Page les Limites seront
(x:0,y:0, largeur : 320, hauteur : 200)
Page 1:
Faites défiler et passer à la Page 1.
Maintenant, les limites seront (x:320,y:0, largeur : 320, hauteur : 200)
Rappelez-vous, nous avons dit à l'égard de son propre Système de coordonnées. Alors maintenant, la "Partie Visible" de notre ScrollView a son "x" à 320. Regardez le cadre de imageView1.
Faites défiler et passer à la Page 2
Limites : (x:640,y:0, largeur : 320, hauteur : 200)
De nouveau, prendre un coup d'oeil à l'image de imageView2
Même pour le cas de UICollectionView. Le moyen le plus facile à regarder collectionView est de faire défiler et de l'imprimer/journal de ses limites et vous aurez l'idée.
Toutes les réponses ci-dessus sont correctes et c'est mon point de vue sur ce:
À différencier entre le cadre et les limites des CONCEPTS développeur devrait lire:
"limites" est source de confusion car elle donne l'impression que les coordonnées de la position de la vue pour laquelle elle est définie. Mais ce sont dans les relations et ajusté en fonction de la hauteur des constantes.
frame = vue de l'emplacement et de la taille à l'aide de la vue parent le système de coordonnées de
limites = vue de l'emplacement et de la taille à l'aide de son propre système de coordonnées
Une des pistes de vue sa taille et son emplacement à l'aide de deux rectangles: un rectangle de cadre et de limites rectangle. Le cadre rectangle définit le point de vue de l'emplacement et la taille dans le superview à l'aide de la superview du système de coordonnées. Les limites rectangle définit à l'intérieur du système de coordonnées qui est utilisé lors de l'élaboration du contenu de la vue, y compris l'origine et de la mise à l'échelle. La Figure 2-1 montre la relation entre le cadre rectangle, sur la gauche, et les limites d'un rectangle, sur la droite.”
En bref, le cadre est superview l'idée d'un point de vue, et les limites est le point de vue propre idée. Le fait d'avoir plusieurs systèmes de coordonnées, une pour chaque point de vue, est une partie de la vue de la hiérarchie.