Question

Je veux mettre en œuvre des bordures de dialogues cette échelle à la taille, je requiers la boîte de dialogue soit. Peut-être il y a un nom mieux plus classique pour ce genre de chose. S'il y a, si quelqu'un modifier le titre, ce serait génial.

Quoi qu'il en soit, je voudrais faire ce que je puisse avoir des dialogues de toute taille sans les artefacts visuels qui viennent avec l'extension art de la frontière aux petites, grandes ou loufoques dimentions disproportionnés. J'ai quelques idées sur la façon dont cela se fait, mais je ne suis pas sûr ce qui est mieux pour l'iphone. J'ai quelques questions.

1) Dois-je faire un objet de vue contenant surchargeant essentiellement sa méthode drawRect et dessine les images où ils devraient être à leur échelle appropriée lorsque la méthode est appelée, ou devrais-je principal un objet contenant de vue qui contient simplement 8 UIImageViews? Je soupçonne que cette dernière approche ne fonctionnera pas si je dois à l'échelle active la classe dialogue qui comme dans une animation.

1b) Si la surcharge drawRect est la voie à suivre, ce que quelqu'un a un exemple de code ou un lien vers un exemple qui illustre le dessin une image directement à partir drawRect ()?

2) Est-il généralement préférable de créer

a) une image 3 x 3, dans lequel les segments sont dans leur grille appropriée 1x1 de l'image? Si oui, est-il simple à tirer d'une partie de cette image sur mon point de vue cible dans drawRect (si l'ancienne hypothèse est correcte que je devrais utiliser drawRect)?

b) Les pièces séparément dans 8 différents fichiers?

Mise à jour: Pour clarifier, l'idée est de prendre tout l'art de la frontière sur mesure et être en mesure d'étirer les 2e, 4e, 6e et 8e cellule (dans une grille 3x3 cellules) pour former une bordure de toute taille avec seulement ces actifs. Stretching juste une image simple entraînerait une distorsion des angles, donc je voudrais étendre ces cellules paires selon les besoins et la sellerie sur les coins donc il n'y a pas de distorsion. Je l'avais vu cela avant, donc pensé que ce serait peut-être une chose standard et une appellation standard d 'autre que ce que je l'ai appelé.

Quoi qu'il en soit, on m'a informé que l'ajout de 8 UIImageViews à un conteneur ne serait pas aussi efficace que tirer les UIImages à la volée drawRect donc a cette approche à l'aide CGContextDrawImage () après avoir appliqué les transformations nécessaires au contexte de traduire et de l'échelle de la Y. Parce que cette fonction tire à partir du coin inférieur gauche d'une image, mais sur un origined haut à gauche UIView, l'image est en baisse à l'envers sans inversion du Y. J'ai remarqué la suggestion d'utiliser les fonctions UIImage comme drawAtPoint fonctionne aussi bien et de même, mais pour l'inversion depuis UIImage tire dans la même orientation que UIViews. Je continuerai ma mise en œuvre avec l'ancien et de voir comment ça se passe, mais une autre question.

Quelqu'un arrive de savoir quelle approche est plus efficeint, plus rapide, etc?

Était-ce utile?

La solution

Je ne suis pas sûr que je suis, mais voici mon meilleur coup à une réponse ...

Utilisation drawRect: ou l'ajout d'UIImageViews individuels à une vue parent est entièrement à vous. UIImageView vous donne un peu de fonctionnalité encapsulée gratuitement, mais sinon, ils sont les mêmes pour autant que les apparences vont.

Si vous ne voulez aller la route drawRect, vous avez juste besoin d'utiliser drawAtPoint de UIImage: méthode. Faites le calcul pour savoir où vous voulez qu'il soit, et dessiner. Vous pouvez calculer vos points en fonction des dimensions de la vue parent.

En ce qui concerne l'échelle, il est impossible de redimensionner ces images sans les mise à l'échelle, donc je prévois avant et de faire vos originaux aussi grand ou plus grand que vous attendez jamais à les afficher.

L'espoir qui aide un peu?

Vive

Autres conseils

Si vous voulez une bordure sur une boîte de dialogue, en supposant que la boîte est une UIView (ou sous-classe), puis définissez les propriétés de bordure de la couche et laisser le système tracer la frontière pour vous.

#import <QuartzCore/QuartzCore.h> 
// ... 

view.layer.borderWidth = 2;
view.layer.borderColor = [UIColor whiteColor].CGColor; 
view.layer.cornerRadius = 0;  // 0=square corners, >0 for rounded
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top