9
votes

Quel est le sens de la vision.bounds.origin?

Dites si je définis la vue.bounds.origin à (50,50), la sous-vision est tirée (50,50) laissée à vue. Mais je pensais que cela devrait être le résultat inverse, alors qu'est-ce que veut dire.origin signifie?

Désolé gars, je ne suis pas un orateur anglais natif, donc je mets ce code d'échantillon et image cette fois-ci ~~ < PRE> XXX

Cela provoquera ce résultat: Entrez la description de l'image ici

Alors pourquoi la vue jaune est située là-bas?


3 commentaires

Qu'entendez-vous par «résultat inverse»?


Pouvez-vous clarifier, éventuellement avec un exemple de code, qui affiche que vous définissez les limites.origin dans et lorsque vous ajoutez la sous-vision et quel est le cadre de la sous-vision?


Où vous avez défini les limites.origin?


5 Réponses :


7
votes

du Documentation :

à l'écran, le rectangle des limites représente le même visible partie de la vue comme rectangle de cadre. Par défaut, l'origine de Le rectangle de limites est réglé sur (0, 0) mais vous pouvez modifier cette valeur à Afficher différentes parties de la vue.

Qu'est-ce que vous avez fait en altérant les limites est efficacement pour traduire SUBVIEW Space de coordonnée interne et à droite par 50 points. Vous avez ensuite ajouté «Subsachanview» avec une origine de 0,0 dans SUBVIEW Space de coordination de SUBVIEW - Il s'agit donc de 50 points et à gauche de l'origine visible de Sous-View .

Si vous aviez défini Sousview 'S image au lieu de limites , vous auriez déplacé Sousview Space de coordonnées de SuperView's , de sorte que votre carré bleu aurait déménagé et à gauche, et le carré jaune serait contenu dans lui et avoir la même origine.

réglage limites à quelque chose qui n'a pas d'origine de (0,0) est similaire à ajouter une traduction à la vue. Dans presque toutes les circonstances, ce n'est pas ce que vous voulez faire, et vous devez définir la propriété image à la place. Chaque vue dans une hiérarchie de vue a son propre espace de coordonnées. Cadre est l'endroit où une vue est par rapport à son superview, et limites est l'espace dans une vue.

Donc, une image de Sous-View décrit son emplacement et sa taille dans les limites . Si les limites de SUPERVIEW '/ CODE> ont une origine non nulle et que vous ajoutez une sous-évaluation avec un cadre ayant une origine zéro, il va être "à l'extérieur" des limites de la supervision.


7 commentaires

"C'est donc 50 points à gauche et à gauche de l'origine visible de la sous-vision" Pourquoi est-ce que cela, pouvez-vous l'expliquer un peu plus?


1. "F Si vous avez défini la trame de Sous-View au lieu des limites, vous auriez déplacé la sous-SUPVIEW dans son espace de coordonnées de SUPERVIEW, votre carré bleue aurait donc déménagé et à gauche" Je pense que vous avez malypé ici, changeant la trame de la sous-vision (Sousview.frame .origin.x + = 50, sous-vision.frame.origin.y + = 50) doit se déplacer en bas à droite. En outre, je ne peux pas imaginer ce que les limites ressemblent quand son origine change


Cela déménagerait et de droit, oui, mais dans la question, le cadre passe d'une origine de 100 100 à une origine de 50,50.


Je ne comprends toujours pas. L'origine du cadre de substitut est relative à l'origine des limites de la sous-espagne, non? Mais alors sous-visview.bounds.origin.x + = 50, Sousview.bounds.origin.y + = 50, vous avez dit que le système de coordonnées interne de Sous-site est traduit en bas à droite, je ne peux pas imaginer comment ces limites ressemblent


Oui, ils sont relatifs. Donc, si vous commencez à partir de 50,50, 0,0 est au-dessus et à gauche de celui-ci. Les sous-espions peuvent être en dehors des limites de leur superview.


Oui, le problème est ici. Vous acceptez que L'origine du cadre de soumission est relatif à l'origine des limites de la sous-sousview . Mais ensuite, l'origine des limites de la sous-espagne est traduite en bas à droite, pourquoi le sous-produit se déplace-t-il en haut à gauche?


Lorsque vous réglez les limites d'origine du carré bleu sur 50, 50, il déplace la partie visible de celle-ci 50 à droite et 50. Ensuite, lorsque vous ajoutez le carré jaune avec l'origine 0,0, les portions de X: 0 - 50, Y: 0 - 50 n'est pas visible dans les limites carrées bleues. Ensuite, effectuez un zoom arrière sur le fond rouge, vous verrez leur emplacement. C'est pourquoi le jaune est x: -50, y: -50 par rapport au carré bleu "cadre.origin"



1
votes

Le cadre de votre vue bleue est toujours de 100, 100, 200, 200. Les limites sont de 50, 50, 200, 200, mais le cadre n'est pas modifié.

La vue jaune est ajoutée à la vue bleue, à 0, 0, dans les limites, pas le cadre. Donc, le jaune se présente à 50, 50, 50, 50.

changer:

SUBVIEW.BONDS = CGRRCTMAKE (50, 50, 200, 200);

à:

Sous-visVIEW.BONDS = CGRRCTMAKE (100, 100, 200, 200);

Et voyez ce qui se passe.


0 commentaires

0
votes

à l'écran, le rectangle des limites représente le même visible partie de la vue comme rectangle de cadre. Par défaut, l'origine de Le rectangle de limites est réglé sur (0, 0) mais vous pouvez modifier cette valeur à Afficher différentes parties de la vue. La taille des limites le rectangle est couplé à la taille du rectangle de cadre, de sorte que les modifications apportées à l'autre concernent l'autre. Changer la taille des limites augmente ou rétrécit la vue par rapport à son point central. Les coordonnées de la Les bornes rectangle sont toujours spécifiées en points.

de la documentation de UIVIEW .

Étudier Voir le Guide de programmation va aussi être utile.


0 commentaires

3
votes

Le problème est que nous pensons généralement que lors de la modification de la vue bleue bleue d'origine (par exemple, décalage vers le bas droit), la vue jaune doit également déplacer le fond juste, sous la vue La position est relative à son système de coordonnées de SuperView (dans ce cas, la vue Blue View Origine des limites). Ce n'est pas le cas

Au lieu de cela, nous devrions penser que la vue bleue définit un masque dans lequel il ne montre qu'une partie du rectangle dans son espace de coordonnées. Donc, si nous modifions la vue Blue View Origine des limites vers le bas droit, il déplace simplement le masque dans le fond droit, et seules les vues à l'intérieur de ce masque sont affichées. Et à la vue rouge , il montre toujours que le masque à une position fixe ( Vue bleue L'origine de l'image ne change pas). Pensez au Red View Prenant le masque Blue (code> et mettez-le à la position définie par le Blue View Cadre

vient de trouver ce Comprendre Uiscrollview par Ole, ce qui est très utile et l'explique très clairement

Je recommande vivement de lire ceci

Une vue fournit une visualisation dans le plan défini par sa coordonnée système. Le rectangle des limites de l'opinion décrit la position et la taille de la zone visible.

Il semble que la vue ait démissu de 100 points, et c'est En fait vrai par rapport à son propre système de coordonnées. Les vues position réelle sur l'écran (ou dans son superview, pour le mettre plus précision) reste fixe, cependant, comme cela est déterminé par son cadre, qui n'a pas changé

Entrez la description de l'image ici


0 commentaires

0
votes

UIWindow: image == limites :: ==> (0, 0, Windowwidth, fenêleHeight)

Sous-site: image :: ==> (100, 100, 200, 200) sur les limites de l'UIWindows [UIWindows Cordinate Space .] p>

Lorsque vous faites ceci: P>

subview.bounds = CGRectMake(50, 50, 200, 200);

subsubview = [[UIView alloc] initWithFrame:CGRectMake(0, 0,100,100)];


0 commentaires