Three20 : classes pour améliorer les classes standard iPhone
AliGator
Membre, Modérateur
http://joehewitt.com/post/the-three20-project/
- PhotoViewer
- MessageComposer
- Internet-aware TableView Controllers (pour les tables qui chargent leur contenu depuis le net et ont donc leur contenu asynchrone)
- ...
- PhotoViewer
- MessageComposer
- Internet-aware TableView Controllers (pour les tables qui chargent leur contenu depuis le net et ont donc leur contenu asynchrone)
- ...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Mais j'ai encore jamais eu l'occasion de les tester.
Bon par contre pour mon projet actuel je peux pas m'en servir car c'est pas compatible avec le SDK 3.2 à cause du NDA, donc faudra attendre ^^
C'est une UIScrollView avec pageEnabled et une classe qui hérite de UIButton non?
Le lien que tu donne renvoie une erreur 500, pour ceux que ça intéresse vous pouvez trouver le code sur Github : http://github.com/facebook/three20
C'est une des librairies utilisée par Facebook pour réaliser son application pour iPhone.
Pierre
Pour mon application j'ai mis en place ce système de Dashboard mais à l'époque je ne connaissais pas le framework utilisé par Facebook. En fait rien de compliqué sur tu ne mets pas en place le fait de pouvoir changer les icônes de place comme le propose l'iPhone. Moi je suis simplement passé par des boutons ajoutés dans un scrollview. C'est en effet comme ça que je l'ai fait. Mais il y a peut-être mieux.
Une copie d'écran disponible ici : http://fr.task-this.com/
Seulement voilà , je m'y perd complètement !
La doc se limite apparemment à :
- quelques articles éparses et très loin de couvrir tous les domaines (c'est un pléonasme)...
- et à l'API (http://api.three20.info/index.html)... qui ne fait que lister les classes existantes et leurs méthodes... mais sans bcp plus d'explications que si on allait voir le .h je trouve.
Au final, pour avoir une TableView qui a le comportement où on peut tirer puis relâcher pour rafraà®chir, bah faut savoir que la classe à utiliser s'appelle TTTableViewDragRefreshDelegate (en plus c'est une classe, pas un @protocol, et pourtant elle s'appelle xxxDelegate...), si on sait pas qu'elle existe cette classe bah on va pas beaucoup plus loin...
Et ensuite on essaye de l'utiliser... et ça compile (enfin après pas mal de manipulations pour supprimer les warnings de partout)... et ça plante... parceque mon datasource ne répond pas à la classe "model"...
Bref j'ai essayé de me baser un peu sur les exemples, mais dès qu'on essaye de modifier un peu un truc, c'est vite le gros bor... bazar
J'ai l'impression que je suis obligé de créer un UIViewController, un TTTableViewController, un TTTableViewDragRefreshDelegate, un TTTableViewDataSource et un TTModel... rien que pour afficher ma table ! mon TTTableViewController ne peux pas jouer le role de DragRefreshDelegate car c'est un objet et pas un @protocol donc il faut un objet séparé, le datasource il lui faut un model séparé (je suis partisan du MVC, mais là quand même...)...
Moi qui ai déjà un sacré paquet de classes pour chacun de mes écrans, là ça me parait le grand boxon pour si peu. En fait j'ai l'impression qu'on est obligé déjà de faire tout avec des classes TTxxx partout, donc qu'il faut tout "convertir"... et en plus qu'il faut 3x plus de classes pour faire ce qu'on veut...
Bref s'il y a des retours d'expérience là dessus, je suis prenneur parce que là , j'avais entendu parler de Three20 je pensais que ça me simplifierai la vie mais j'ai vraiment l'impression que c'est plutôt l'inverse !
Ca me donne pas envie là !
Et si on se faisait un "ThreeDev" ?
::)
Après si tu fais un projet entièrement basé sur TT au niveau de l'UI et que tu suis les exemples donnés, ça doit être assez bien foutu je pense. Et pour les autres trucs que l'UI ça va, par exemple j'utilise les TTURLRequest pour envoyer une requête POST en multipart/formdata (pour envoyer des fichiers à mon serveur) et ça marche plutôt bien. Mais bon c'était que de la couche métier, j'avais juste une classe TTURLRequest à utiliser et basta.
Là c'est pour la couche "vue" et les "Internet-Aware Table Views" que je galère, et notre graphiste ayant imaginé une interface qui sort un peu des exemples fournis par Three20, bah dès qu'on s'écarte des exemples j'ai des soucis de partout. Pour les trucs genre springboard ou photoviewer c'est p'tet autre chose et moins galère, j'ai pas testé (mais la doc n'a pas l'air plus riche non plus)
Donc après soit je ne maà®trise pas le framework, et c'est pour ça que je fais appel à des REX si certains l'ont déjà utilisé... soit on est obligé pour ce qui est de l'UI d'utiliser les TTmachin partout, et là j'avoue...
Il y a quelques temps je voulais créer une navigation d'images à la façon de l'application Photos, c'est-à -dire défilement horizontal des images, et pour chaque image la possibilité de zoomer (pinch ou double-tap), ainsi que masquage des éléments d'interface au-dessus de l'image; chaque image est chargée depuis une URL distante.
Avant de me lancer, j'avais fait qques recherches qui m'ont amené à ce framework, et j'ai également vite eu l'impression d'être perdu ! Du coup je n'ai pas trop approfondi, mais j'avais l'impression qu'au lieu de pouvoir simplement bénéficier d'une ou l'autre classe bien foutues permettant d'offrir plus que les classes de base, on rajoutait une couche complète TTSomething sans que ce soit forcément très clair.
Bref, j'avais laissé tombé l'idée et était arrivé moi-même à un résultat correct. Mais pour ma part je suis plutôt partisan de qques classes bien ciblées pour une fonctionnalité précise.
Si qqun est intéressé à un PhotoViewer, je veux bien partager ce que j'ai fait pour arriver à qqchose de vraiment bien.
Bonjour,
Il y a une vidéo de la wwwdc 2010 qui ne parle que de cela : Session 104 - Designing Apps with Scroll Views.
K.
Pour le reste, le plus compliqué n'est pas le système général, mais plutôt de gérer les petits détails, comme le replacement après une rotation.
[EDIT]
J'ai eu le temps de regarder la vidéo de la session 104 de la WWDC, et voilà mon avis:
- j'ai enfin compris comment centrer correctement et facilement une image dans le processus !
- l'optimisation utilisant des CATiledLayer requiert apparemment un travail sur les images elle-mêmes (découpage); utile sur les ressources fournies par l'application elle-même, mais beaucoup moins lorsqu'elles sont chargée dynamiquement
- leur application ne gère pas le changement d'orientation et se contente de charger des images du bundle
Du coup j'ai bien envie de reprendre ce que j'avais fait en me basant sur leur travail. Je vous tiens au courant si je trouve le temps de m'y mettre (un peu limite ce mois-ci mais sait-on jamais...).
Et j'arrête de polluer ce fil, désolé Ali