UIView personnalisée pour un UITableViewCell
Bonjour à tous,
Voilà je vous soumets une question qui me taraude...
Je voudrais personnaliser avec une forme particulière ( un carré avec bord arrondi + triangle pointant à droite sur bord droit du carré) un UIView présent dans un UITableViewCell.
Sachant que le contenu de cette forme doit prendre des couleurs différentes et l'intérieur du carré va contenir un chiffre de 1 à 99 (pour simplifier)
Ma question est la suivante :
Quelle est la meilleur façon de réaliser cet objet ?
- via CALayer,
- via UIImageView + UITextView ( l'image serait construite sous Illustrator) avec possibilité de modifier la couleur de l'image ?!
- via [font=Courier, Consolas, monospace]CGContextRef[/font]
- un peu des 3 ?
Je voudrais simplement prendre la bonne voie...
Merci d'avance pour votre aide.
Voilà je vous soumets une question qui me taraude...
Je voudrais personnaliser avec une forme particulière ( un carré avec bord arrondi + triangle pointant à droite sur bord droit du carré) un UIView présent dans un UITableViewCell.
Sachant que le contenu de cette forme doit prendre des couleurs différentes et l'intérieur du carré va contenir un chiffre de 1 à 99 (pour simplifier)
Ma question est la suivante :
Quelle est la meilleur façon de réaliser cet objet ?
- via CALayer,
- via UIImageView + UITextView ( l'image serait construite sous Illustrator) avec possibilité de modifier la couleur de l'image ?!
- via [font=Courier, Consolas, monospace]CGContextRef[/font]
- un peu des 3 ?
Je voudrais simplement prendre la bonne voie...
Merci d'avance pour votre aide.
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En fait, l'implémentation du drawRect: peut être pénalisant (surtout dans une table view). Dans certains cas il est plus performant de faire appel directement aux propriétés CALayer plutôt que d'intervenir dans le drawRect: (par exemple pour choisir la couleur du background).
Ce qu'il faut prendre en compte - je pense - c'est la performance globale obtenue dans la table view. Pour réaliser ce que xyloweb souhaite faire, j'ai utilisé une sous classe de UIView avec, dans l'implémentation du drawRect: des UIBezierPath. Quelques lignes de code à peine qui ne pénalise pas le scroll de ma table view (60 fps).
UIImageView peut être aussi une bonne option étant donné que cette classe est optimisée pour l'affichage. Pas testé ça.
en fait si on peut modifier la couleur d'un bitmap affiché par un UIImageView ça serait une piste intéressante également...
#kuberman : l'utilisation de UIBezierPath est sans doute une solution à tester également
- Un UIBezierPath pour faire ton tracé (ta bulle aux bords arrondis avec la pointe en triangle)
- Un CAShapeLayer utilisant ce UIBezierPath pour faire le rendu de ce UIBezierPath à l'écran. Tu peux alors choisir la couleur de contour, de fond, etc par code
- Soit un UILabel par dessus le tout, soit un CATextLayer en sublayer pour le texte (attention, CATextLayer ne fait pas d'antialiasing il me semble, voir les détails dans la doc sur ce point)
Au passage, PaintCode qui peut te permettre de générer ce type de code facilement. Perso je ne l'ai jamais essayé, mais plusieurs en ont déjà parlé sur le forum, et entre autres, ils ont un tuto vidéo ici qui montre précisément comment faire la forme que tu veux faire (c'est pour ça que je m'en souviens et que je le cite) et montre donc comment donc PaintCode peut te générer automatiquement le code pour créer ce BezierPath... si ça t'intéresse de tester...
Effectivement, je sentais bien qu'une des solutions élégante passait par CALayer... et ses acolytes.
Je ne connais pas PaintCode et je vais tester, ça peut m'éviter de trop me torturer la cervelle pour construire ma courbe de Bézier /thumbsup.gif' class='bbc_emoticon' alt='' />
Effectivement, ce logiciel répond parfaitement à ma demande et en plus il est plus tôt bien écrit.
Un régale, je vais pouvoir personnaliser assez facilement mes GUI ;-)
Merci encore Ali.