Question

J'ai environ 50 images de 50 x 50 pixels chacune. Je veux que l'utilisateur choisisse l'un d'entre eux. Donc, j'ai d'abord pensé à UITableView, mais ce n'est tout simplement pas la bonne chose. Cela gaspille beaucoup d’écran. Plutôt que de placer toutes les images les unes en dessous des autres, il serait préférable d'afficher une grille de 6 colonnes et n lignes, par exemple.

J'utiliserais UIScrollView et le remplirais d'objets UIView que j'organisais automatiquement pour qu'ils apparaissent comme une grille. Est-ce la voie à suivre? Ou d'autres suggestions?

Était-ce utile?

La solution

Je fais quelque chose de très similaire dans mon application: une grille NxN avec une image en dessous et une autre sous-vue au-dessus pour dessiner les "lignes", appartenant toutes à UIScrollView. Je recommande d'avoir une vue séparée pour dessiner les images, quelque chose comme:

-(void) drawRect(CGRect rect) {
    CGRect smallerRect = CGRectMake(x, y, width, height);
    [yourImage drawRect: smallerRect];
    // repeat as needed to draw the grid
 }

Une autre affiche indique que vous ne pourrez pas obtenir d'événements tactiles si votre vue appartient à un UIScrollView. Ce n'est tout simplement pas vrai. Je le travaille. Vous devrez peut-être définir les éléments suivants:

[yourScrollView setUserInteractionEnabled: YES]
[yourGridView setUserInteractionEnabled: YES]

Autres conseils

La la bibliothèque three20 a une classe qui le fait.

Une vue sous forme de tableau n'implique pas nécessairement l'affichage d'une image par ligne, comme vous le suggérez. Les cellules de tableau peuvent être personnalisées et une sous-classe de cellules avec six UXmageViews 50x50 serait assez simple. C’est peut-être moins flexible qu’une vue par défilement, mais si votre objectif est de visionner six images par ligne, une vue sous forme de tableau est le moyen le plus rapide de l’obtenir.

three20 est horrible, je l’avais utilisé, je ne le recommande pas ... afficher une grille est facile ...

    - (void) reloadGridView
    {

        scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(5, 54, scrollViewWidth, scrollViewHeight8)];
        scrollView.delegate = self;
        scrollView.showsVerticalScrollIndicator = NO;
        scrollView.showsVerticalScrollIndicator = NO;
        scrollView.userInteractionEnabled = YES;
        scrollView.scrollEnabled = YES;

        [self.view addSubview:scrollView];


        int x = 10;
        int y = 10;

        divisor = 1;

        for (int i = 0; i < [self.photosArray count]; i++) {

            int buttonTag = divisor;

            UIImage *thumb = [UIImage imageWithContentsOfFile:[self thumbPathAtIndex:i]];
            //********* CREATE A BUTTON HERE **********
            //********* use the thumb as its backgroundImage *******


            if(divisor%4==0){
                y+=70; 
                x = 10;

            }else{
               x += 70;
            }

            divisor++;
        }
        [scrollView setContentSize:CGSizeMake(scrollViewWidth, ([self.photosArray count]%4 == 0) ? y : y+100)];

}

et si vous voulez 6 images en paysage - configurez un BOOL pour isLandscape

if (isLandscape) {
    //change the divisor to change @ 6 instead of 4
}

si vous avez besoin d'un gridView plus avancé, consultez AQGridView (Google it)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top