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 ~~ p> < PRE> XXX PRE>
Cela provoquera ce résultat:
p>
Alors pourquoi la vue jaune est située là-bas? P> p>
5 Réponses :
du Documentation : p>
à 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. p> blockQuote>
Qu'est-ce que vous avez fait en altérant les limites code> code> est efficacement pour traduire
SUBVIEW code> Space de coordonnée interne et à droite par 50 points. Vous avez ensuite ajouté «Subsachanview» avec une origine de 0,0 dans
SUBVIEW code> Space de coordination de SUBVIEW - Il s'agit donc de 50 points et à gauche de l'origine visible de
Sous-View code>. p>
Si vous aviez défini
Sousview code> 'S
image code> au lieu de
limites code>, vous auriez déplacé
Sousview code> Space de coordonnées de SuperView's em>, 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. p>
réglage
limites code> à 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é code> image code> à la place. Chaque vue dans une hiérarchie de vue a son propre espace de coordonnées.
Cadre CODE> est l'endroit où une vue est par rapport à son superview, et
limites code> est l'espace dans une vue. p>
Donc, une image code> de Sous-View > décrit son emplacement et sa taille dans les limites code> code>. Si les limites CODE> de SUPERVIEW '/ CODE> ont une origine non nulle et que vous ajoutez une sous-évaluation avec un cadre
code> ayant une origine zéro, il va être "à l'extérieur" des limites de la supervision. p>
"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 i> 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 b>. 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"
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é. P>
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. P>
changer: p>
à: p>
Et voyez ce qui se passe. p> SUBVIEW.BONDS = CGRRCTMAKE (50, 50, 200, 200); CODE> P>
Sous-visVIEW.BONDS = CGRRCTMAKE (100, 100, 200, 200); CODE> P>
à 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. P> blockQuote>
de la documentation de UIVIEW . P>
Étudier Voir le Guide de programmation a > va aussi être utile. p>
Le problème est que nous pensons généralement que lors de la modification de la vue code> bleue bleue code> d'origine (par exemple, décalage vers le bas droit), la vue jaune doit également déplacer le fond juste, sous la vue Au lieu de cela, nous devrions penser que la vue bleue code> 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 vient de trouver ce Comprendre Uiscrollview par Ole, ce qui est très utile et l'explique très clairement p>
Je recommande vivement de lire ceci p>
Une vue fournit une visualisation 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é p>
blockQuote>
CODE> La position est relative à son système de coordonnées de SuperView (dans ce cas, la vue
Blue View Code> Origine des limites). Ce n'est pas le cas p>
Blue View Code> 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 code>, il montre toujours que le masque à une position fixe (
Vue bleue code> L'origine de l'image ne change pas). Pensez au
Red View code> Prenant le masque code> Blue (code> et mettez-le à la position définie par le
Blue View Code> Cadre P>
p>
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)];
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?