2010-10-30 22 views
1

je veux afficher de nombreuses images comme des vignettes dans une vue défilante et et je veux que les images affichées dynamiquement nous défiler vers le bas ou à gauche comme une cellule vue cellulescomment charger les images dans ma vue de manière dynamique dans une vue déroulante dans l'iPhone

peut u s'il vous plaît dire comment ça ...

Merci

avec le code..when suivant nous faire défiler la vue de défilement im appelant ce code et capable d'afficher les images dynamiquement (qui r uniquement visible) mais le problème est .. tout en faisant défiler avec les barres de défilement im obtenant les deux images ..vertically et horizontalement .. son seulement se produit quand je défiler .. tout corps peut-il m'aider s'il vous plaît ..?

int tileSize; 
    int imgSize; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){ 
     tileSize = 255; 
     imgSize = 247; 
    }else{ 
     tileSize = 120; 
     imgSize = 116; 
    } 
    CGRect visibleBounds = [songsContainer bounds]; 
    for (UIView *tile in [songsContainer subviews]) { 
     CGRect scaledTileFrame =[tile frame]; 
     if (! CGRectIntersectsRect(scaledTileFrame, visibleBounds)) { 
      for(UIView *view in [tile subviews]) 
       [view removeFromSuperview]; 
      [recycledCells addObject:tile]; 
      [tile removeFromSuperview]; 
     } 
    } 
    int maxRow =[songsDict count]-1; // this is the maximum possible row 
    int maxCol = noOfRowsInCell-1; // and the maximum possible column 
    int firstNeededRow = MAX(0, floorf(visibleBounds.origin.y/tileSize)); 
    int firstNeededCol = MAX(0, floorf(visibleBounds.origin.x/tileSize)); 
    int lastNeededRow = MIN(maxRow, floorf(CGRectGetMaxY(visibleBounds)/tileSize)); 
    int lastNeededCol = MIN(maxCol, floorf(CGRectGetMaxX(visibleBounds)/tileSize)); 
    NSLog(@".........MaxRow-%d,MaxCol-%d,firstNeddedRow-%d,firstNeededcol-%d,lNR-%d,lNC%d",maxRow, maxCol, firstNeededRow,firstNeededCol,lastNeededRow,lastNeededCol); 
    // iterate through needed rows and columns, adding any tiles that are missing 
    for (int row = firstNeededRow; row <= lastNeededRow; row++) { 
     NSMutableArray *tempArray = (NSMutableArray *)[songsDict objectAtIndex:row]; 
     for (int col = firstNeededCol; col <= lastNeededCol ; col++) { 
      BOOL tileIsMissing = (firstVisibleRow > row || firstVisibleColumn > col || 
            lastVisibleRow < row || lastVisibleColumn < col); 
      if (tileIsMissing) { 
       UIView *tile = (UIView *)[self dequeueReusableTile]; 

       if (!tile) { 
        // the scroll view will handle setting the tile's frame, so we don't have to worry about it 
        tile = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; 
        tile.backgroundColor = [UIColor clearColor]; 
       } 
       //tile.image = image for row and col; 
       // set the tile's frame so we insert it at the correct position 
       CGRect frame = CGRectMake(tileSize * col, tileSize * row, imgSize, imgSize); 
       tile.frame = frame; 
       if(col<[tempArray count]) 
        [self addContentForTile:tile:row:col]; 
       else tile.backgroundColor = [UIColor clearColor]; 
       [songsContainer addSubview:tile]; 

      } 
     } 
    } 
    firstVisibleRow = firstNeededRow+1; firstVisibleColumn = firstNeededCol+1; 
    lastVisibleRow = lastNeededRow; lastVisibleColumn = lastNeededCol; 

Répondre

0

Ce que vous avez à faire est de créer votre scrollview comme vous le souhaitez. Vous devez décider si vous voulez une disposition de la grille ou une disposition linéaire. En outre, si la grille, voulez-vous verrouillé aux limites horizontales, verrouillé à la verticale, de sorte qu'il défile verticalement ou horizontalement, respectivement. Une fois que vous avez trié, alors ce que je recommande est de prendre l'architecture semblable à un fonctionnement de table. C'est-à-dire créer des «cellules» individuelles qui retiendront vos vignettes. Une fois que vous avez ces cellules, vous les ajoutez comme sous-vues de votre scrollview, à certains décalages (vous devez faire quelques calculs sur les plans x/y).

+0

Merci Jer, je vais essayer et laissez-vous savoir .. merci encore:] – rockey

+0

mais l'application ipad WindowShop de l'application Amazon peut être défilable verticalement et horizontalement ... ils se chargent dynamiquement à droite? – rockey

+0

Vous n'avez pas besoin de verrouiller l'un ou l'autre des axes, juste en général, dans les vignettes, on verrouille l'axe horizontal ou vertical dans le scrollview. Ce que j'ai dit s'applique toujours si vous ne voulez pas verrouiller l'un ou l'autre axe. – jer

0

Commencez avec une vue de défilement et ajouter chaque image dans une UIImageView en tant que sous-vue au scrollview à un certain endroit. Une chose à garder à l'esprit est de ne conserver en mémoire que les images actuellement affichées et leurs voisins immédiats.

+1

En fonction du nombre de vues d'image dont il dispose et qui peuvent consommer beaucoup de mémoire. Il va vouloir regarder (pour la robustesse) à une cellule et un mécanisme de file d'attente – jer

+0

@Jer oui, je veux comme ça. – rockey