Scrollview design Pinterest like

CeetixCeetix Membre
Bonsoir tout le monde,



J'ai télécharger l'application Pinterest (pour pinter plein de trunc ^^).

La présentation des données est assez intéressante je trouve.



Voici un screen d'exemple :



media_1329862802697.png



C'est une sorte de grid/tableview mais avec des cells de tailles différentes.

Auriez-vous une idée de ce mécanisme d'affichage et quid de la reusability de ces cellules ?

Réponses

  • AlakAlak Membre
    Je sais pas trop mais j'ai vu un truc semblable sur sur l'app iPad de vente-privée. ça m'interresse aussi.
  • FKDEVFKDEV Membre
    Ma 1ere idée, ce serait 3 table view synchronisée. Je ne sais pas si on obtiendrait le même effet, faut essayer.
  • yoannyoann Membre
    Les trois colonnes peuvent bouger séparément ?



    Dans tous les cas c'est simplement une scrollView avec des images dedans à  mon avis...
  • CeetixCeetix Membre
    Non tout bouge en même temps. Bah que des images dedans. A mon avis il y a de reusability derrière.
  • FKDEVFKDEV Membre
    mai 2012 modifié #6
  • yoannyoann Membre
    Trois tableView à  synchroniser pour moi c'est crade comme solution.



    Un scrollView, des images, et un peu d'optimisation pour réutiliser les cellules / faire du lazy loading c'est pas si compliqué... Je l'avais fait à  une époque pour recréer une CoverFlow sur iOS.
  • FKDEVFKDEV Membre
    A priori c'est moins joli de synchroniser 3 table views c'est vrai..

    Après si le rendu est correct, il faut voir le contexte (budget, temps, expérience du développeur, réutilisation possible, etc).

    En supposant que ça marche, c'est quand même beaucoup moins de code à  écrire.



    D'Ailleurs pour du coverflow je ne me poserais même pas la question. Table view sans hésiter (avec une rotation à  90°).







  • Je partirai aussi sur un composant custom basé sur une UIScrollView.

    Par contre niveau perfs ça va être assez délicat si tu cherches à  faire un composant open-source. Il vaut mieux un composant à  soit très optimisé pour ses besoins qu'un composant open-source qui peut faire, potentiellement, plus de choses mais qui risquerait de t'handicaper niveau performances.

    Enfin, je dis ça par expérience. On peut aussi oublier l'iPhone 3G et donc ne supporter qu'iOS 4.3 et ultérieur.
  • Je partirai aussi sur une scrollview mais après j'avoue ne pas trop savoir par où partir.
  • AliGatorAliGator Membre, Modérateur
    Il y a plusieurs vidéos de la WWDC qui expliquent cela, en particulier les sessions de 2010 ou 2011 de mémoire il y avait tout d'expliqué pour comment implémenter le recyclage lors d'un scrolling (sur l'exemple d'un PhotoViewer)
  • yoannyoann Membre
    'FKDEV' a écrit:


    D'Ailleurs pour du coverflow je ne me poserais même pas la question. Table view sans hésiter (avec une rotation à  90°).




    Très grosse erreur à  mon avis. Réimplémenter le système de recyclage ce n'est pas compliqué et ça évite de perdre énormément de temps a modifié un composant dont on a pas les sources et qui n'est pas du tout fait pour ça.
  • Bonjour, je suis un un projet un peu similaire mais un peu plus complexe (du genre http://www.tiki-toki.com/ pour l'iPad)...



    J'ai trois timelines (par rapport au site de tiki-toki), une super générale, qui synchronise une autre qui est sur une petite période de temps qui synchronise une troisième (sur une année), et qui synchronise le contenu (ici une chronologie)... je ne suis pas sûr d'avoir été clair !



    Je suis partie sur des classes perso pour les timelines (dessinées à  la volée) pour créer mes propres sliders.

    Ensuite j'utilise un scrollbar perso aussi pour les élément d'affichage.



    J'ai essayé des views dans le scrollbar avec un succès très partagé (près de 1,000 évènements avec photo) : affichage lent, passe pas sous iPad 1 etc. J'ai tenté des reuse de cellules, mais difficile aussi, car cela se voyait à  l'affichage (flickering), et de plus mes items n'ont pas du tout la même taille ni le même emplacement...



    Du coup je dessine tout à  la main dans le contexte (très rapide), et connaissant la taille de ma vue temporelle (affichage du scrollview) je ne dessine que ce qui est visible plus ou moins un delta (je tri mon tableau des items en amont et pointe directement sur le premier item de l'affichage).



    Si cela peut aider...
  • FKDEVFKDEV Membre
    Bon voilà  une maquette de la version "crade" claquée en 1h30.

    Je suis partie avec un seul tableau d'image que je repartie dans les 3 tableviews.

    La difficulté se trouve en fin de liste. Les tableviews n'ont pas toute la même longueur puisque les images ont des tailles aléatoires donc il faut soit ajouter des images à  la volée (ce que j'ai fait mais on obtient un "à -coup"), soit avoir une répartition des images précalculée pour tomber sur des tableViews de taille totale similaire.



    Je suis parti sur un projet "single view application" qui utilise ARC.


    <br />
    [color=#c82a25]<br />
    [color=#74492d]#import [/color]&lt;UIKit/UIKit.h&gt;[/color]<br />
    [color=#74492d]<br />
    #define NB_COLUMNS [color=#3900d5]3[/color][/color]<br />
    [color=#7031a8]<br />
    [color=#b414a1]@interface[/color][color=#000000] ViewController : [/color]UIViewController[color=#000000]&lt;[/color]UITableViewDataSource[color=#000000], [/color]UITableViewDelegate[color=#000000]&gt;[/color][/color]<br />
    {<br />
        [color=#b414a1]__strong[/color] [color=#7031a8]UITableView[/color]* tableViews[[color=#74492d]NB_COLUMNS[/color]];<br />
        [color=#b414a1]__strong[/color] [color=#7031a8]NSMutableArray[/color]* images;<br />
        [color=#7031a8]NSUInteger[/color] numberOfRows[[color=#74492d]NB_COLUMNS[/color]];<br />
    }<br />
    [color=#b414a1]<br />
    @end[/color]<br />
    



    <br />
    [color=#c82a25]<br />
    [color=#74492d]#import [/color]&quot;ViewController.h&quot;[/color]<br />
    [color=#568186]<br />
    [color=#b414a1]@interface[/color][color=#000000] [/color]ViewController[color=#000000] ()[/color][/color]<br />
    [color=#b414a1]<br />
    @end[/color]<br />
    [color=#74492d]<br />
    #define NB_IMAGES [color=#3900d5]333[/color][/color][color=#74492d]<br />
    #define MIN_HEIGHT [color=#3900d5]10[/color][/color]<br />
    <br />
    <br />
    [color=#b414a1]@implementation[/color] ViewController<br />
    [color=#74492d]<br />
    #pragma mark -[/color][color=#74492d]<br />
    #pragma mark helpers[/color]<br />
    -([color=#7031a8]UIImage[/color] *)imageFromText:(NSString *)text size:([color=#7031a8]CGSize[/color])size<br />
    {<br />
        [color=#7031a8]UIFont[/color] *font = [[color=#7031a8]UIFont[/color] [color=#3f0b80]systemFontOfSize[/color]:size.[color=#7031a8]height[/color]];  <br />
    [color=#1a870f]<br />
    [color=#000000]    [/color]// check if UIGraphicsBeginImageContextWithOptions is available (iOS is 4.0+)[/color][color=#3f0b80]<br />
    [color=#000000]    [/color][color=#b414a1]if[/color][color=#000000] ([/color]UIGraphicsBeginImageContextWithOptions[color=#000000] &#33;= [/color][color=#b414a1]NULL[/color][color=#000000])[/color][/color][color=#3f0b80]<br />
    [color=#000000]        [/color]UIGraphicsBeginImageContextWithOptions[color=#000000](size, [/color][color=#b414a1]NO[/color][color=#000000], [/color][color=#3900d5]0.0[/color][color=#000000]);[/color][/color]<br />
        [color=#b414a1]else[/color][color=#1a870f]<br />
    [color=#000000]        [/color]// iOS is &lt; 4.0 [/color][color=#3f0b80]<br />
    [color=#000000]        [/color]UIGraphicsBeginImageContext[color=#000000](size);[/color][/color]<br />
    [color=#1a870f]<br />
    [color=#000000]    [/color]//Draw some text[/color][color=#3f0b80]<br />
    [color=#000000]    [/color][color=#7031a8]CGContextRef[/color][color=#000000] ctx = [/color]UIGraphicsGetCurrentContext[color=#000000]();[/color][/color][color=#3f0b80]<br />
    [color=#000000]    [/color]CGContextSetStrokeColorWithColor[color=#000000](ctx, [[[/color][color=#7031a8]UIColor[/color][color=#000000] [/color]blackColor[color=#000000]] [/color]CGColor[color=#000000]]);[/color][/color][color=#3f0b80]<br />
    [color=#000000]    [text [/color]drawAtPoint[color=#000000]:[/color]CGPointMake[color=#000000]([/color][color=#3900d5]0.0[/color][color=#000000], [/color][color=#3900d5]0.0[/color][color=#000000]) [/color]withFont[color=#000000]:font];[/color][/color]<br />
    [color=#1a870f]<br />
    [color=#000000]    [/color]// transfer image[/color][color=#3f0b80]<br />
    [color=#000000]    [/color][color=#7031a8]UIImage[/color][color=#000000] *image = [/color]UIGraphicsGetImageFromCurrentImageContext[color=#000000]();[/color][/color][color=#3f0b80]<br />
    [color=#000000]    [/color]UIGraphicsEndImageContext[color=#000000]();    [/color][/color]<br />
    <br />
        [color=#b414a1]return[/color] image;<br />
    }<br />
    <br />
    -([color=#7031a8]NSInteger[/color])columnFromTableView:([color=#7031a8]UITableView[/color]*)view<br />
    {<br />
        [color=#b414a1]for[/color] ([color=#7031a8]NSInteger[/color] i= [color=#3900d5]0[/color]; i &lt; [color=#b414a1]sizeof[/color]([color=#568186]tableViews[/color])/[color=#b414a1]sizeof[/color]([color=#b414a1]id[/color]); i++)<br />
        {<br />
            [color=#b414a1]if[/color] (view == [color=#568186]tableViews[/color][i])<br />
                [color=#b414a1]return[/color] i;<br />
        }    <br />
        [color=#74492d]assert[/color]([color=#3900d5]0[/color]);<br />
        [color=#b414a1]return[/color] -[color=#3900d5]1[/color];<br />
    }<br />
    <br />
    -([color=#7031a8]UIImage[/color]*)imageAtRow:([color=#7031a8]NSUInteger[/color])row InView:([color=#7031a8]UITableView[/color]*)tableView<br />
    {<br />
        [color=#7031a8]NSInteger[/color] column = [[color=#b414a1]self[/color] [color=#37595d]columnFromTableView[/color]:tableView];<br />
        [color=#7031a8]NSUInteger[/color] indexImage = (row*[color=#74492d]NB_COLUMNS[/color] + column)%[color=#74492d]NB_IMAGES[/color];<br />
        [color=#b414a1]return[/color] [[color=#568186]images[/color] [color=#3f0b80]objectAtIndex[/color]:indexImage];    <br />
    }<br />
    [color=#74492d]<br />
    #pragma mark -[/color][color=#74492d]<br />
    #pragma mark KVO[/color]<br />
    <br />
    - ([color=#b414a1]void[/color])observeValueForKeyPath:([color=#7031a8]NSString[/color] *)keyPath ofObject:([color=#b414a1]id[/color])object change:([color=#7031a8]NSDictionary[/color] *)change context:([color=#b414a1]void[/color] *)context<br />
    {[color=#1a870f]<br />
    [color=#000000]    [/color]//When the contentOffset of a tableView changes, update the other tableViews[/color]<br />
        [color=#b414a1]static[/color] [color=#b414a1]BOOL[/color] isObservingContentOffsetChange = [color=#b414a1]NO[/color];<br />
        [color=#b414a1]if[/color]([object [color=#3f0b80]isKindOfClass[/color]:[[color=#7031a8]UITableView[/color] [color=#3f0b80]class[/color]]] &amp;&amp; [keyPath [color=#3f0b80]isEqualToString[/color]:[color=#c82a25]@&quot;contentOffset&quot;[/color]])<br />
        {<br />
            [color=#b414a1]if[/color](isObservingContentOffsetChange) [color=#b414a1]return[/color];<br />
            isObservingContentOffsetChange = [color=#b414a1]YES[/color];<br />
            [color=#b414a1]for[/color] ([color=#b414a1]int[/color] i= [color=#3900d5]0[/color]; i &lt; [color=#b414a1]sizeof[/color]([color=#568186]tableViews[/color])/[color=#b414a1]sizeof[/color]([color=#b414a1]id[/color]); i++)<br />
            {<br />
                [color=#b414a1]if[/color]([color=#568186]tableViews[/color][i] &#33;= object)<br />
                {<br />
                    [color=#7031a8]CGPoint[/color] offset = [[change [color=#3f0b80]valueForKey[/color]:[color=#7031a8]NSKeyValueChangeNewKey[/color]] [color=#3f0b80]CGPointValue[/color]];<br />
                    [color=#74492d]assert[/color]([color=#568186]tableViews[/color][i].[color=#7031a8]contentSize[/color].[color=#7031a8]height[/color] &gt; [color=#568186]tableViews[/color][i].[color=#7031a8]frame[/color].[color=#7031a8]size[/color].[color=#7031a8]height[/color]);[color=#1a870f]//TODO[/color]<br />
                    [color=#b414a1]if[/color] (offset.[color=#7031a8]y[/color] &lt; [color=#568186]tableViews[/color][i].[color=#7031a8]contentSize[/color].[color=#7031a8]height[/color] - [color=#568186]tableViews[/color][i].[color=#7031a8]frame[/color].[color=#7031a8]size[/color].[color=#7031a8]height[/color])<br />
                        [color=#568186]tableViews[/color][i].[color=#7031a8]contentOffset[/color] = offset;<br />
                    [color=#b414a1]else[/color]<br />
                    {[color=#1a870f]<br />
    [color=#000000]                    [/color]//insert 20 rows (arbitrary) to [/color]<br />
                        [[color=#568186]tableViews[/color][i] [color=#3f0b80]beginUpdates[/color]];<br />
                        [color=#b414a1]for[/color] ([color=#b414a1]int[/color] j = [color=#3900d5]0[/color]; j &lt; [color=#3900d5]20[/color]; j++)<br />
                        {<br />
                            [color=#7031a8]NSIndexPath[/color]* indexPath = [[color=#7031a8]NSIndexPath[/color] [color=#3f0b80]indexPathForRow[/color]:[color=#568186]numberOfRows[/color][i] [color=#3f0b80]inSection[/color]:[color=#3900d5]0[/color]];[color=#3f0b80]<br />
    [color=#000000]                        [[/color][color=#568186]tableViews[/color][color=#000000][i] [/color]insertRowsAtIndexPaths[color=#000000]:[[/color][color=#7031a8]NSArray[/color][color=#000000] [/color]arrayWithObject[color=#000000]:indexPath] [/color]withRowAnimation[color=#000000]:[/color]UITableViewRowAnimationNone[color=#000000]];[/color][/color]<br />
                            [color=#568186]numberOfRows[/color][i] = [color=#568186]numberOfRows[/color][i]+[color=#3900d5]1[/color];<br />
                        }<br />
                        [[color=#568186]tableViews[/color][i] [color=#3f0b80]endUpdates[/color]];                    <br />
                    }<br />
                }<br />
            }<br />
            isObservingContentOffsetChange = [color=#b414a1]NO[/color];<br />
            [color=#b414a1]return[/color];<br />
        }<br />
    [color=#3f0b80]<br />
    [color=#000000]    [[/color][color=#b414a1]super[/color][color=#000000] [/color]observeValueForKeyPath[color=#000000]:keyPath [/color]ofObject[color=#000000]:object [/color]change[color=#000000]:change [/color]context[color=#000000]:context];[/color][/color]<br />
    }[color=#74492d]<br />
    #pragma mark -[/color][color=#74492d]<br />
    #pragma mark view Management[/color]<br />
    <br />
    - ([color=#b414a1]void[/color])viewDidLoad<br />
    {[color=#3f0b80]<br />
    [color=#000000]    [[/color][color=#b414a1]super[/color][color=#000000] [/color]viewDidLoad[color=#000000]];[/color][/color]<br />
        [color=#7031a8]CGRect[/color] frame = [color=#b414a1]self[/color].[color=#7031a8]view[/color].[color=#7031a8]frame[/color];<br />
    <br />
        frame.[color=#7031a8]size[/color].[color=#7031a8]width[/color] /= [color=#74492d]NB_COLUMNS[/color];<br />
    <br />
        [color=#b414a1]for[/color] ([color=#b414a1]int[/color] i= [color=#3900d5]0[/color]; i &lt; [color=#b414a1]sizeof[/color]([color=#568186]tableViews[/color])/[color=#b414a1]sizeof[/color]([color=#b414a1]id[/color]); i++)<br />
        {[color=#3f0b80]<br />
    [color=#000000]        [/color][color=#568186]tableViews[/color][color=#000000][i] = [[[/color][color=#7031a8]UITableView[/color][color=#000000] [/color]alloc[color=#000000]] [/color]initWithFrame[color=#000000]:frame [/color]style[color=#000000]:[/color]UITableViewStylePlain[color=#000000]];[/color][/color]<br />
            [color=#568186]tableViews[/color][i].[color=#7031a8]delegate[/color] = [color=#b414a1]self[/color];<br />
            [color=#568186]tableViews[/color][i].[color=#7031a8]dataSource[/color] = [color=#b414a1]self[/color];        [color=#7031a8]<br />
    [color=#000000]        [/color][color=#568186]tableViews[/color][color=#000000][i].[/color]showsVerticalScrollIndicator[color=#000000] = [/color][color=#b414a1]NO[/color][color=#000000];[/color][/color][color=#3f0b80]<br />
    [color=#000000]        [/color][color=#568186]tableViews[/color][color=#000000][i].[/color][color=#7031a8]separatorStyle[/color][color=#000000] = [/color]UITableViewCellSeparatorStyleNone[color=#000000];[/color][/color]<br />
            [[color=#b414a1]self[/color].[color=#7031a8]view[/color] [color=#3f0b80]addSubview[/color]:[color=#568186]tableViews[/color][i]];<br />
            [color=#568186]numberOfRows[/color][i] = [color=#74492d]NB_IMAGES[/color]/[color=#3900d5]3[/color];<br />
    <br />
            frame.[color=#7031a8]origin[/color].[color=#7031a8]x[/color] += frame.[color=#7031a8]size[/color].[color=#7031a8]width[/color];         <br />
        }<br />
    [color=#1a870f]<br />
    [color=#000000]    [/color]//create a batch of images[/color][color=#3f0b80]<br />
    [color=#000000]    [/color][color=#568186]images[/color][color=#000000] = [[[/color][color=#7031a8]NSMutableArray[/color][color=#000000] [/color]alloc[color=#000000]] [/color]initWithCapacity[color=#000000]:[/color][color=#74492d]NB_IMAGES[/color][color=#000000]];[/color][/color]<br />
        [color=#b414a1]for[/color] ([color=#b414a1]int[/color] i =[color=#3900d5]0[/color]; i &lt; [color=#74492d]NB_IMAGES[/color]; i++)<br />
        {<br />
            [color=#7031a8]NSString[/color]* text = [[color=#7031a8]NSString[/color] [color=#3f0b80]stringWithFormat[/color]:[color=#c82a25]@&quot;%04d&quot;[/color], i];<br />
            [color=#7031a8]CGSize[/color] size = [color=#3f0b80]CGSizeMake[/color](frame.[color=#7031a8]size[/color].[color=#7031a8]width[/color], [color=#74492d]MIN_HEIGHT[/color]+[color=#3f0b80]arc4random[/color]() % [color=#3900d5]100[/color]);<br />
            [color=#7031a8]UIImage[/color] * image = [[color=#b414a1]self[/color] [color=#37595d]imageFromText[/color]:text [color=#37595d]size[/color]:size];<br />
            [[color=#568186]images[/color] [color=#3f0b80]addObject[/color]:image];<br />
        }<br />
    }<br />
    <br />
    -([color=#b414a1]void[/color])viewWillAppear:([color=#b414a1]BOOL[/color])animated<br />
    {<br />
        [color=#b414a1]for[/color] ([color=#b414a1]int[/color] i= [color=#3900d5]0[/color]; i &lt; [color=#b414a1]sizeof[/color]([color=#568186]tableViews[/color])/[color=#b414a1]sizeof[/color]([color=#b414a1]id[/color]); i++)<br />
        {<br />
            [[color=#568186]tableViews[/color][i] [color=#3f0b80]reloadData[/color]];[color=#3f0b80]<br />
    [color=#000000]        [[/color][color=#568186]tableViews[/color][color=#000000][i] [/color]addObserver[color=#000000]:[/color][color=#b414a1]self[/color][color=#000000] [/color]forKeyPath[color=#000000]:[/color][color=#c82a25]@&quot;contentOffset&quot;[/color][color=#000000] [/color]options[color=#000000]:[/color]NSKeyValueObservingOptionNew[color=#000000] [/color]context[color=#000000]:[/color][color=#b414a1]NULL[/color][color=#000000]];           [/color][/color]<br />
        }<br />
    }<br />
    <br />
    - ([color=#b414a1]void[/color])viewDidUnload<br />
    {[color=#3f0b80]<br />
    [color=#000000]    [[/color][color=#b414a1]super[/color][color=#000000] [/color]viewDidUnload[color=#000000]];[/color][/color][color=#1a870f]<br />
    [color=#000000]    [/color]// Release any retained subviews of the main view.[/color][color=#1a870f]<br />
    [color=#000000]    [/color]// TODO[/color]<br />
    }<br />
    <br />
    - ([color=#b414a1]BOOL[/color])shouldAutorotateToInterfaceOrientation:([color=#7031a8]UIInterfaceOrientation[/color])interfaceOrientation<br />
    {[color=#3f0b80]<br />
    [color=#000000]    [/color][color=#b414a1]if[/color][color=#000000] ([[[/color][color=#7031a8]UIDevice[/color][color=#000000] [/color]currentDevice[color=#000000]] [/color]userInterfaceIdiom[color=#000000]] == [/color]UIUserInterfaceIdiomPhone[color=#000000]) {[/color][/color][color=#3f0b80]<br />
    [color=#000000]        [/color][color=#b414a1]return[/color][color=#000000] (interfaceOrientation &#33;= [/color]UIInterfaceOrientationPortraitUpsideDown[color=#000000]);[/color][/color]<br />
        } [color=#b414a1]else[/color] {<br />
            [color=#b414a1]return[/color] [color=#b414a1]YES[/color];<br />
        }<br />
    }<br />
    [color=#74492d]<br />
    #pragma mark -[/color][color=#74492d]<br />
    #pragma mark UITableViewdatasource[/color]<br />
    <br />
    - ([color=#7031a8]NSInteger[/color])tableView:([color=#7031a8]UITableView[/color] *)tableView numberOfRowsInSection:([color=#7031a8]NSInteger[/color])section<br />
    {<br />
         [color=#7031a8]NSInteger[/color] column = [[color=#b414a1]self[/color] [color=#37595d]columnFromTableView[/color]:tableView];<br />
        [color=#b414a1]return[/color] [color=#568186]numberOfRows[/color][column];<br />
    }<br />
    - ([color=#7031a8]UITableViewCell[/color] *)tableView:([color=#7031a8]UITableView[/color] *)tableView cellForRowAtIndexPath:([color=#7031a8]NSIndexPath[/color] *)indexPath<br />
    {<br />
        [color=#b414a1]static[/color] [color=#7031a8]NSString[/color] *cellIdentifier = [color=#c82a25]@&quot;CellIdentifier&quot;[/color];<br />
        [color=#7031a8]UITableViewCell[/color]* cell = [tableView [color=#3f0b80]dequeueReusableCellWithIdentifier[/color]:cellIdentifier];<br />
        [color=#b414a1]if[/color] (&#33;cell) <br />
        {[color=#3f0b80]<br />
    [color=#000000]        cell = [[[/color][color=#7031a8]UITableViewCell[/color][color=#000000] [/color]alloc[color=#000000]] [/color]initWithStyle[color=#000000]:[/color]UITableViewCellStyleDefault[color=#000000] [/color]reuseIdentifier[color=#000000]:cellIdentifier];[/color][/color]<br />
        }<br />
        [color=#7031a8]UIImage[/color]* image = [[color=#b414a1]self[/color] [color=#37595d]imageAtRow[/color]:indexPath.[color=#7031a8]row[/color] [color=#37595d]InView[/color]:tableView];<br />
        cell.[color=#7031a8]imageView[/color].[color=#7031a8]image[/color] = image;<br />
    <br />
        [color=#b414a1]return[/color] cell;<br />
    }<br />
    [color=#74492d]<br />
    #pragma mark -[/color][color=#74492d]<br />
    #pragma mark UITableViewDelegate[/color]<br />
    <br />
    - ([color=#7031a8]CGFloat[/color])tableView:([color=#7031a8]UITableView[/color] *)tableView heightForRowAtIndexPath:([color=#7031a8]NSIndexPath[/color] *)indexPath<br />
    {<br />
        [color=#7031a8]UIImage[/color]* image = [[color=#b414a1]self[/color] [color=#37595d]imageAtRow[/color]:indexPath.[color=#7031a8]row[/color] [color=#37595d]InView[/color]:tableView];<br />
        [color=#b414a1]return[/color] image.[color=#7031a8]size[/color].[color=#7031a8]height[/color];<br />
    }<br />
    <br />
    - ([color=#b414a1]void[/color])tableView:([color=#7031a8]UITableView[/color] *)tableView didSelectRowAtIndexPath:([color=#7031a8]NSIndexPath[/color] *)indexPath<br />
    {<br />
        [color=#7031a8]UIImage[/color]* image = [[color=#b414a1]self[/color] [color=#37595d]imageAtRow[/color]:indexPath.[color=#7031a8]row[/color] [color=#37595d]InView[/color]:tableView];[color=#c82a25]<br />
    [color=#000000]    [/color][color=#3f0b80]NSLog[/color][color=#000000]([/color]@&quot;Tapped imagesize : %f,%f&quot;[color=#000000], image.[/color][color=#7031a8]size[/color][color=#000000].[/color][color=#7031a8]width[/color][color=#000000], image.[/color][color=#7031a8]size[/color][color=#000000].[/color][color=#7031a8]height[/color][color=#000000]);[/color][/color]<br />
    }<br />
    [color=#b414a1]<br />
    @end[/color]<br />
    
  • APAP Membre
    mai 2012 modifié #16
    celui-ci aussi semble pas mal comme candidat:

    https://github.com/p...SCollectionView



    edit1:

    un 3ième pour la route (ca semble être le sujet fashion du moment ce truc)

    https://github.com/ekohe/EKStreamView



    Edit 2: voila que je tombe sur un 4ième...

    https://github.com/aceisScope/WaterflowView
  • C'est immonde comme maquette..
  • FKDEVFKDEV Membre
    'ldesroziers' a écrit:


    C'est immonde comme maquette..




    Tu peux développer ta pensée, stp.
  • Bha c'est moche niveau design pattern, voilà  tout.
  • Sinon y a du payant : http://www.binpress.com/app/pinterest-gridview-for-ios-masonryview/836 image/evil.gif' class='bbc_emoticon' alt='>:D' />
  • FKDEVFKDEV Membre
    'ldesroziers' a écrit:


    Bha c'est moche niveau design pattern, voilà  tout.




    Arf' ok. Je ne peux pas le nier.

    Merci pour tes commentaires.
Connectez-vous ou Inscrivez-vous pour répondre.