2011-02-24 7 views
0

J'ai un problème avec mon UIImageView qui ne se met pas à jour. Donc, c'est comme ça: J'ai un UIScrollView qui contient un UIImageView (appelé imageView). Maintenant, imageView, devrait contenir plus de UIImageViews. Ces UIImageViews que j'ajoute du code mais ils n'apparaissent pas.UIImageView ne met pas à jour

Voici le code:

for(i = 0 ; i < NrOfTilesPerHeight ; i++) 
    for(j = 0 ; j < NrOfTilesPerWidth ; j++) 
    {    
     imageRect = CGRectMake(j*TILE_WIDTH,i*TILE_HEIGHT,TILE_WIDTH, TILE_HEIGHT); 
     image = CGImageCreateWithImageInRect(aux.CGImage, imageRect); 

     if(!data[i][j]) 
     NSLog(@"data[%d][%d] is nil",i,j); 

     context = CGBitmapContextCreate (data[i][j], TILE_WIDTH, TILE_HEIGHT, 
         bitsPerComponent, bitmapBytesPerRow, colorSpace, 
         kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 

     if (context == NULL) 
     { 
      free (data); 
      printf ("Context not created!"); 
      CGColorSpaceRelease(colorSpace); 
     } 

     CGContextDrawImage(context, CGRectMake(0, 0, TILE_WIDTH, TILE_HEIGHT), image); 

     data[i][j] = CGBitmapContextGetData (context); 
     memcpy(originalData[i][j],data[i][j],TILE_WIDTH*TILE_HEIGHT*numberOfCompponents); 

     CGContextFlush(context); 

     CGImageRelease(image); 

     UIImageView *imgView = [[UIImageView alloc] init]; 
     [imgView setTag:i*10+j]; 

     CGRect frame = imgView.frame; 
     frame.origin.x = j * (TILE_WIDTH+5) * initialScale; 
     frame.origin.y = i * (TILE_HEIGHT+5) * initialScale; 
     frame.size.width *= initialScale; 
     frame.size.height *= initialScale; 

     [imgView setFrame:frame]; 

     [imageView addSubview:imgView]; 

     [self updateTileAtLine:i andRow:j]; 

     [imgView release]; 
     CGDataProviderRelease(dataProvider); 
     CGImageRelease(cgImage);   
    } 



- (void) updateTileAtLine: (int) i andRow: (int) j 
{   
    CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, data[i][j], bitmapByteCount, NULL); 

    CGImageRef cgImage = CGImageCreate(TILE_WIDTH, TILE_HEIGHT, bitsPerComponent, 
       bitsPerPixel, bitmapBytesPerRow, colorSpace,   kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big, dataProvider, NULL, false, kCGRenderingIntentDefault); 

    UIImage *myImg = [UIImage imageWithCGImage:cgImage]; 
    UIImageView *auxImageView = (UIImageView*) [imageView viewWithTag:(i*10+j)]; 
    [auxImageView setImage:myImg]; 

    CGDataProviderRelease(dataProvider); 
    CGImageRelease(cgImage); 
} 

maintenant ... cela ne se bloque ... donc tout est non nul et ok. Si au lieu d'utiliser viewWithTag, j'alloue init un nouveau UIImageView et l'ajoute à imageView, il apparaîtra. Mais je ne veux pas faire une autre copie de la vue puisque cette méthode updateTile sera appelée assez souvent.

Ma question est: Pourquoi l'auxImageView n'apparaît-il pas? Cela devrait beaucoup.

Merci.

Cordialement, George

Répondre

1

Essayez cette

for(UIView *view in [imageView subviews]) { 
if(view.tag == i*10+j) { 

UIImageView *auxImageView = (UIImageView*) view; 
[auxImageView setImage:myImg]; 
} 

}