Question

UIView a les propriétés frame, bounds, center et origin, et ils semblent tous être reliés entre eux. La plupart du temps, je traite avec le réglage de la <=> position et la taille d'un <=>. Je comprends que le système est d'utiliser <=> de coordonnées global et utilise la coordination <=> de la vue locale (donc son x et y sont 0, mais pas toujours), mais il est encore confus pour moi d'utiliser ce.

Dans quel contexte (et quel est le bon moment) les autres propriétés (<=>, <=>, <=>) doit être utilisé?

Était-ce utile?

La solution

La réponse de Marco ci-dessus est correct, mais juste d'étendre sur la question de « sous quel contexte » ...

cadre - c'est la propriété que vous utilisez le plus souvent pour les applications iPhone normales. la plupart des contrôles seront disposés par rapport au « contenant » de sorte que le contrôle frame.origin correspond directement à l'endroit où le contrôle doit afficher, et frame.size détermineront la taille pour faire le contrôle.

Centre - c'est la propriété que vous aurez probablement se concentrer sur des jeux et des animations à base de sprites où le mouvement ou mise à l'échelle peuvent se produire. En animation par défaut et la rotation sera basé sur le centre de la UIView. Il est rarement judicieux d'essayer de gérer ces objets par la propriété cadre.

limites - cette propriété est pas une propriété de positionnement, mais définit la zone drawable du UIView « relative » au cadre. Par défaut, cette propriété est généralement (0, 0, largeur , hauteur ). La modification de cette propriété vous permettra de dessiner en dehors du cadre ou restreindre le dessin à une zone plus petite dans le cadre. Une bonne discussion de ce qui peut être trouvé sur le lien ci-dessous. Il est rare que cette propriété à manipuler moins qu'il y ait besoin spécifique d'ajuster la région de dessin. La seule exception est que la plupart des programmes utiliseront le au démarrage pour [[UIScreen mainScreen] bounds] déterminer la zone visible pour l'application et la configuration initiale de leur cadre de UIView en conséquence.

Pourquoi y at-il un rectangle de cadre et un rectangle de limites dans un UIView?

Espérons que cela aide à clarifier les circonstances dans lesquelles chaque propriété pourrait se habituer.

Autres conseils

Ils sont des valeurs liées, et maintenir la cohérence entre les méthodes setter / getter de propriété (et en utilisant le fait que trame est une valeur purement synthétique, non soutenue par une variable d'instance réelle).

Les principales équations sont:

frame.origin = center - bounds.size / 2

(qui est le même que)

center = frame.origin + bounds.size / 2

(et il y a aussi)

frame.size = bounds.size

Ce n'est pas le code, les équations juste pour exprimer l'invariant entre les trois propriétés. Ces équations supposent également transformer votre point de vue est de l'identité, qui est par défaut. Si ce n'est pas, alors les limites et le centre conservent le même sens, mais cadre peut changer. À moins que vous faites des rotations non à angle droit, le cadre sera toujours le point de vue transformé en termes de coordonnées du SuperView.

Ce truc est expliqué plus en détail avec une mini-bibliothèque utile ici:

http://bynomial.com/blog/?p=24

Les propriétés center, et bounds sont verrouillés frame: changer une mettra à jour les autres, afin de les utiliser comme vous le voulez. Par exemple, au lieu de modifier les x / y params de <=> à recentrera vue, simplement mettre à jour la propriété <=>.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top