2011-02-24 84 views
0

我有我的UIImageView不更新的問題。 所以,它是這樣的: 我有一個包含UIImageView(稱爲imageView)的UIScrollView。 現在,imageView應該包含更多的UIImageViews。那些從代碼中添加的UIImageViews,但它們沒有出現。UIImageView不更新

這是代碼:

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); 
} 

現在...這不崩潰......所以一切是非零和確定。 如果不是使用viewWithTag,我將init分配給一個新的UIImageView並將其添加到imageView,它會出現。但我不想做另一個視圖副本,因爲這個updateTile方法會經常被調用。

我的問題是:爲什麼不顯示auxImageView?它非常應該。

謝謝。

問候, 喬治

回答

1

試試這個

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

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

}