PaintCode : 1 avis - 2 questions (+1 hors sujet Oio)
kyudan
Membre
1 avis :
Bon, comme quand j'ai une idée dans la tête je ne l'ai pas ailleurs, j'ai fini par casser la tirelire et je me suis payé " PaintCode ". Premier constat, ça pique le c.. 79,90 € ; c'est un peu le prix de l'affiliation au programme développeur d'Apple (même si eux on ne paie qu'une fois mais quand même ...). Sinon, dans la pratique (quelques heures hier soir) ça me semble fort pratique pour quelqu'un comme moi qui met très peu les mains dans le code (merci ARC et SB) et qui du coup comprend pas toujours ce qu'il fait ou tout du moins pourquoi il le fait ...
Là , pour le coup après avoir créé (super facilement) mon premier bouton (avec ombre, coin arrondi et tout et tout) je me suis retrouvé avec un poxon (syn. Très gros paquet) de ligne de code à ...... ben à rien faire, et j'ai mis un temps non négligeable (5h) à comprendre quoi faire de tout ça (et oui j'avais avant jamais créé aucun bouton customisé manuellement ... création de la sous-classe du bouton et utilisation de CGRect ... hum bref c'est pas ça le plus important hein). Mais une fois terminé ce fut la révélation (ou la consternation), je vais modifier l'intégralité de mes programmes en cours et remplacer ma collection de .png par du code et cela me semble bien plus intéressant (surtout pour les ajustements de couleur, de taille etc.) ; heureusement l'hiver approche et cela promet de longues nuits fort intéressantes.
1ère question : certain d'entre vous utilisent-ils cet outil, qu'en pensent-ils ; avec le recule si cela fait un moment, est ce que cela vous apporte plus en terme de gain de temps, de précision, de souplesse ...
2ème question : avez-vous trouvé des ressources, genre éléments d'interfaces ou illustrations sur internet directement codé avec cet outil ? (j'ai passé pas mal de temps sur Google mais ce ne fut pas concluant mis à par deux projet sur Github).
Question hors-sujet mais en rapport avec ma nouvelle manière de générer mes éléments d'interface (bon j'ai un peu honte car je sens bien que ce n'est vraiment pas violent mais bon cela ne sert à rien de parcourir un forum en espérant qu'un plus boulet que soi pose la question qui nous taraude, autant tout de suite fermer mon compte cocoacafé, hein !) :
Alors voilà , après avoir (non sans peine) créé mon bouton customisé en créant une sous-classe de UIButton (c'est peut-être d'ailleurs pas la meilleure solution ...), je me retrouve avec un joli bouton sur ma vue pile comme dans mes rêves. Seulement je calle littéralement sur la manière de procéder pour changer la classe de mon bouton. J'ai bien créé une action sur mon bouton pour que lorsque j'appuie dessus il se passe quelque chose mais après quoi ? Comment changer son design (partant du principe que j'ai créé deux sous-classes genre " boutonInitial " et " boutonSelectionne ". Comment faire pour passer de l'un à l'autre ? Cela m'enlèverait bien des misères pour le we à venir ! Au moins des pistes à explorer (mais je prends aussi les solutions hein !)
Voilà , encore un post court /implore.gif' class='bbc_emoticon' alt=' ' />
Bon, comme quand j'ai une idée dans la tête je ne l'ai pas ailleurs, j'ai fini par casser la tirelire et je me suis payé " PaintCode ". Premier constat, ça pique le c.. 79,90 € ; c'est un peu le prix de l'affiliation au programme développeur d'Apple (même si eux on ne paie qu'une fois mais quand même ...). Sinon, dans la pratique (quelques heures hier soir) ça me semble fort pratique pour quelqu'un comme moi qui met très peu les mains dans le code (merci ARC et SB) et qui du coup comprend pas toujours ce qu'il fait ou tout du moins pourquoi il le fait ...
Là , pour le coup après avoir créé (super facilement) mon premier bouton (avec ombre, coin arrondi et tout et tout) je me suis retrouvé avec un poxon (syn. Très gros paquet) de ligne de code à ...... ben à rien faire, et j'ai mis un temps non négligeable (5h) à comprendre quoi faire de tout ça (et oui j'avais avant jamais créé aucun bouton customisé manuellement ... création de la sous-classe du bouton et utilisation de CGRect ... hum bref c'est pas ça le plus important hein). Mais une fois terminé ce fut la révélation (ou la consternation), je vais modifier l'intégralité de mes programmes en cours et remplacer ma collection de .png par du code et cela me semble bien plus intéressant (surtout pour les ajustements de couleur, de taille etc.) ; heureusement l'hiver approche et cela promet de longues nuits fort intéressantes.
1ère question : certain d'entre vous utilisent-ils cet outil, qu'en pensent-ils ; avec le recule si cela fait un moment, est ce que cela vous apporte plus en terme de gain de temps, de précision, de souplesse ...
2ème question : avez-vous trouvé des ressources, genre éléments d'interfaces ou illustrations sur internet directement codé avec cet outil ? (j'ai passé pas mal de temps sur Google mais ce ne fut pas concluant mis à par deux projet sur Github).
Question hors-sujet mais en rapport avec ma nouvelle manière de générer mes éléments d'interface (bon j'ai un peu honte car je sens bien que ce n'est vraiment pas violent mais bon cela ne sert à rien de parcourir un forum en espérant qu'un plus boulet que soi pose la question qui nous taraude, autant tout de suite fermer mon compte cocoacafé, hein !) :
Alors voilà , après avoir (non sans peine) créé mon bouton customisé en créant une sous-classe de UIButton (c'est peut-être d'ailleurs pas la meilleure solution ...), je me retrouve avec un joli bouton sur ma vue pile comme dans mes rêves. Seulement je calle littéralement sur la manière de procéder pour changer la classe de mon bouton. J'ai bien créé une action sur mon bouton pour que lorsque j'appuie dessus il se passe quelque chose mais après quoi ? Comment changer son design (partant du principe que j'ai créé deux sous-classes genre " boutonInitial " et " boutonSelectionne ". Comment faire pour passer de l'un à l'autre ? Cela m'enlèverait bien des misères pour le we à venir ! Au moins des pistes à explorer (mais je prends aussi les solutions hein !)
Voilà , encore un post court /implore.gif' class='bbc_emoticon' alt=' ' />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne l'utilise pas, mais je me suis tâté à l'acheter. Pour un professionnel, 79 € n'est pas un trop gros investissement si on s'en sert. Mais justement, je crois que je ne m'en servirais pas beaucoup. Sous-classer UIButton pour changer son apparence n'est pas forcément la manière classique de faire, on utilise plutôt un PNG pour cela. Si on compare les deux approches:
PaintCode:
- Bien: ça dessine avec Quartz, donc pas de problème de résolution (Retina), et c'est économe en mémoire.
- Pas bien: on est forcément limité à ce que sait faire Quartz, et le graphiste (qui est rarement moi-même) ne peut pas utiliser ses outils habituels.
PNG
- Bien: On a toute liberté dans le choix des outils et on peut faire des rendus complexes.
- Pas bien: il faut générer des png à toutes les résolutions, et ça prend de la place dans l'appli.
Finalement, j'ai acheté Sketch 2 dont je suis très satisfait. Il possède des outils intéressants, par exemple on peut exporter à la fois à l'échelle 1 et l'échelle 2 pour le Retina. C'est un outil beaucoup plus flexible que Paint Code, d'ailleurs je m'en sers aussi pour mon site web.
Dans le XIB, panneau de droite, clique sur le troisième onglet. Il y a un champ qui indique la classe de l'objet. Mets celle de ton bouton à la place de UIButton.
Ou je n'ai pas bien saisi ou je me suis mal exprimé, pour que mon bouton ai l'apparence de ce que j'ai créé effectivement j'ai modifié la classe de mon bouton en remplaçant UIButton par ma propre classe de bouton. Ce que je veux faire c'est modifier celle-ci en fonction d'une action (en appuyant sur ledit bouton ou par toute autre action exterieure au bouton en question).
Dans la méthode dessin, il faut faire quelque chose comme ça:
Mais bon, c'est une technique avancée, et vraiment pour quand on a pas trop le choix ou pour manipuler le Runtime au bas niveau, genre faire un peu de "hacking" pour des cas assez avancés.
Donc on est bien d'accord que de base c'est déconseillé et pas du tout la bonne manière de faire, un objet n'est pas sensé changer de classe une fois instancié dans les principes de base de la POO, et que la bonne manière de faire est de faire comme tu as indiqué dans le drawRect. C'est juste que dans l'absolu et pour ton info, en manipulant le runtime, c'est possible /tongue.png' class='bbc_emoticon' alt=':P' />
Merci bien en tout cas.
C'est pour cela que j'avais bien émis quelques réserves... Je me doutais qu'il y avait une bidouille possible, mais je n'ai jamais essayé, ni même ressenti le besoin.
Ca peut être très utile par exemple, pour remplacer l'implémentation d'une méthode d'une instance donnée pour aider à débuguer (en remplaçant la classe de l'instance par une sous-classe, et rajouter dans cette sous-classe la nouvelle implémentation, tout ça au runtime). Faut juste s'assurer que les 2 représentations mémoire (structure des ivars en particulier) des classes échangées sont compatibles (ce qui est le cas pour une sous-classe qui n'a pas d'ivar supplémentaire). Pour ta gouverne, c'est ce qui est utilisé par Apple pour implémenter le KVO d'ailleurs, sous le capot (en remplaçant la classe des instances par une sous-classe dont les setters observés sont surchargés).
Mais bon, on s'éloigne du sujet, et on commence à rentrer dans des considérations un peu trop expertes par rapport à la question d'origine là /biggrin.png' class='bbc_emoticon' alt=':D' />
En fait c'est bien pour des trucs basiques, mais quand on commence à vouloir faire des formes assez complexes le code devient n'importe quoi.
Dans la première démo que j'avais testé, même pour un simple rectangle ce con me faisait un tracé du CGPath point par point au lieu d'utiliser CGPathCreateWithRect()..
Pour une première utilisation j'ai failli vomir.
Donc là , visiblement, le graphiste peut bossé comme il veut et hop, magique, ça marche ?
Ca me paraà®t improbable mais c'est ce qu'il semble se passer...
Des témoignages ?
Je n'ai pas encore mis à jour ma version, je vais faire ça ce WE. J'avais cependant testé la version béta pour exporter un svg et le résultat était bof mais je me suis rendu compte que mon fichier de base n'étais pas ... vectoriel ; l'import était donc partiel ...
J'essayerai de faire quelques essais et des captures pour donner un avis.
En tout cas pour tout ce qui est de mes autres créations (bouton, background ...) le code généré (pas forcément optimum pour les puristes semble-t-il) fonction parfaitement. Du coup je me suis mis en tête de convertir tout mes .png en création paintcode. Pour les basiques c'est assez facile et très rapide mais pour ce qui des plus aboutis il me reste à bien prendre en main paintcode pour les réaliser. A la vue des réalisations de différents projets sur Github notamment, il n'y a pas vraiment de limite ... Le tout restant bien plus malléable et beaucoup plus facile à modifier que les .png à redéfinir voir recréer à chaque modification même mineure ; sans parler du gain d'octets ...
ils t'ont entendu râler... /wink.png' class='bbc_emoticon' alt=';)' />
http://www.youtube.c...PixelCutCompany
Si je devais lui faire une critique, ou plutôt une idée d'évolution, ce serait de pouvoir sous-classer directement les objets graphiques qu'on souhaite customiser et ainsi générer à la volée des classes complètes.
En tout état de cause, c'est un très bon outil. /thumbsup.gif' class='bbc_emoticon' alt='' />
Je viens de tester avec un export SVG depuis Sketch. Mis a part un souci sur des gradients, ça a l'air de marcher plutôt pas mal. A suivre sur de plus gros fichiers.
PS: Je viens de leur envoyer le fichier incriminé. Moins de 10 minutes après j'avais un premier retour. /thumbsup.gif' class='bbc_emoticon' alt='' />