Question

Je vais commencer par dire ce que je veux faire, car je ne suis pas sûr de poser la bonne question. Je fais une carte basée sur une grille et je vais tenir un tableau d'objets pour conserver l'état et la présentation de la carte. Chaque objet sera d'une classe de tuiles. Devrais-je sous-classer UIView ou sous-classe NSObject et avoir un ivar d’UIView. Je prévoyais également d'avoir un UIImageView dans UIView pour charger l'image qui représente ce bit de la carte. Enfin, je voulais charger la vue à partir d'une carte NIB.

Individuellement, je sais comment faire chacune de ces choses, mais je ne suis pas sûr de la meilleure pratique. Des pensées?

Était-ce utile?

La solution

Avez-vous envisagé les couches Core Animation? Vous pouvez créer une seule vue avec une grille de calques, chacune avec ses propres limites et sa propre position dans la vue. On dirait que cela pourrait vous donner ce dont vous avez besoin. Sur le téléphone, définir le contenu d'un calque avec une image est aussi simple que cela:

CALayer *gridLayer = [CALayer layer];
[gridLayer setContents:(id)[gridImage CGImage]];
[gridLayer setBounds:[gridImage bounds]];

// Position the layer's center a x:25.0 y:25.0 within the view
[gridLayer setPosition:CGPointMake(25.0f, 25.0f)];

[[view layer] addSublayer:gridLayer];

La variable gridImage est un UIImage * que vous avez alloué quelque part. Il vous suffira de calculer les valeurs et les positions de votre couche et de les placer en conséquence.

Autres conseils

Assurez-vous de bien définir les classes / objets particuliers qui constituent votre modèle, votre contrôleur et votre vue. Vos données et votre logique de données doivent figurer dans le modèle, votre affichage dans la vue et vous devez les lier ensemble au contrôleur.

Le moyen le plus simple de réaliser une grille consiste à utiliser UIImageViews qui sont positionnés par un seul contrôleur. Le modèle suivra les relations logiques entre les carrés de la carte et les transmettra au contrôleur qui chargera les images dans UIIMageView. Le contrôleur se chargera de tout charger de la pointe.

Cependant, l’utilisation de CALayers est la méthode de pointe préférée. La relation modèle, contrôleur et vue de base est la même, sauf que les CALayers remplacent ImageViews.

Si je comprends bien, vous pouvez créer une sous-classe de UIImageView.

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