web-dev-qa-db-fra.com

Comment définir une référence d'origine UIView?

Je crée un UIImageView et l'ajoute en boucle à ma vue, je mets le cadre initial à 0,0,1,47 et à chaque passage de la boucle je change le centre de la vue de l'image pour les espacer.

J'utilise toujours 0 comme Origin.y

Le problème est que la référence d'origine est au centre de la vue de l'image, en supposant que nous étions dans le constructeur d'interface, cela équivaut à l'image ci-dessous.

Comment puis-je changer le point de référence dans le code?

enter image description here

20
Daniel

Après avoir lu ces réponses et vos commentaires, je ne sais pas vraiment quel est votre point.

Avec UIView, vous pouvez définir la position de 2 façons:

  • center - Il est certain que c'est le centre.
  • frame.Origin - Coin supérieur gauche, ne peut pas être défini directement.

Si vous voulez que le coin inférieur gauche soit à x = 300, y = 300, vous pouvez simplement faire ceci:

UIView *view = ...
CGRect frame = view.frame;
frame.Origin.x = 300 - frame.size.width;
frame.Origin.y = 300 - frame.size.height;
view.frame = frame;

Mais si vous allez plus loin dans le monde magique de CALayers (n'oubliez pas d'importer QuartzCore), vous êtes plus puissant.

CALayer a ces éléments:

  • position - Vous voyez, ça ne dit pas explicitement 'centre', donc ça peut ne pas être centre!
  • anchorPoint - CGPoint avec des valeurs dans la plage 0..1 (y compris) qui spécifie le point à l'intérieur de la vue. La valeur par défaut est x = 0,5, y = 0,5 qui signifie "centre" (et -[UIView center] Suppose cette valeur). Vous pouvez lui attribuer toute autre valeur et la propriété position sera appliquée à ce point.

Exemple de temps:

  1. Vous avez une vue de taille 100x100
  2. view.layer.anchorPoint = CGPointMake(1, 1);
  3. view.layer.position = CGPointMake(300, 300);
  4. Le coin supérieur gauche de la vue est à x = 200, y = 200 et son coin inférieur droit est à x = 300, y = 300.

Remarque: Lorsque vous faites pivoter le calque/la vue, il sera tourné autour du anchorPoint, qui est le centre par défaut.

Bu puisque vous demandez juste COMMENT faire une chose spécifique et non CE QUE vous voulez réaliser, je ne peux plus vous aider maintenant.

44
Tricertops

Le cadre de l'objet inclut sa position dans sa vue d'ensemble. Vous pouvez le changer avec quelque chose comme:

CGRect frame = self.imageView.frame;
frame.Origin.y = 0.0f;
self.imageView.frame = frame;
8
Phillip Mills

Si je vous comprends bien, vous devez définir le cadre de l'image que vous souhaitez déplacer. Cela peut être fait dans le cas simple comme ceci:

_theImageView.frame = CGRectMake(x, y, width, height);

De toute évidence, vous devez définir vous-même x, y, la largeur et la hauteur. Sachez également que le cadre d'une vue fait référence à sa vue parent. Donc, si vous avez une vue dans le coin supérieur gauche (x = 0, y = 0), de 320 points de large et 400 points de haut, et que vous définissez le cadre de la vue d'image sur (10, 50, 100, 50), puis ajoutez-la en tant que sous-vue de la vue précédente, elle se trouvera à x = 10, y = 50 de l'espace de coordonnées de la vue parent, même si les limites de la vue d'image sont x = 0, y = 0 Les limites sont en référence à la vue elle-même, le cadre en référence au parent.

Ainsi, dans votre scénario, votre code pourrait ressembler à ceci:

CGRect currentFrame = _theImageView.frame;
currentFrame.Origin.x = 0;
currentFrame.Origin.y = 0;
_theImageView.frame = currentFrame;

[_parentView addSubview:_theImageView];

Alternativement, vous pouvez dire:

CGRect currentFrame = _theImageView.frame;
_theImageView.frame = CGRectMake(0, 0, currentFrame.size.width, currentFrame.size.height);

[_parentView addSubview:_theImageView];

L'une ou l'autre approche définira la vue d'image en haut à gauche du parent auquel vous l'ajoutez.

2
jmstone617