Grand Central Dispatch -отображает первое изображение при загрузке? #180;

Я просто хочу пререндерить разные изображения для быстрого доступа. Здесь я использую Grand Central Dispatch для выполнения различных блоков.

После запуска очереди я хочу установить первое изображение, когда оно будет готово. С текущим кодом ниже, к сожалению, первое изображение будет отображаться только после того, как все изображения будут обработаны.

Итак, как я могу изменить код? Можно ли получить делегата после завершения каждого изображения?

Вот код:

// Async prerendering
    for (int i = 0; i < count; i++) {

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

            dispatch_async(dispatch_get_main_queue(), ^{

                UIImage* finalImage = [self prerenderImageForIndex:i];
                [self.imageArray addObject:finalImage];   

                // TODO: i want to display the first image. 
                // rendering goes on in the background 

               if (i==0 && [self.imageArray objectAtIndex:0] != nil ) {
                    self.image = [self.imageArray objectAtIndex:0];
                }
            });
        });
    }

Обновление:

-(UIImage*) prerenderImageForIndex:(int)frame {
 UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.frame.size.width, self.frame.size.height), NO, 0);      

        for (int i=0; i< [configurationArray count]; i++) {     
         //... get the layerName

        UIImage* layerImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:layerName ofType:@"png"]];

              // draw layer with blendmode and alpha 
        [layerImage drawInRect:CGRectMake(x, y, layerImage.size.width, layerImage.size.height) 
                     blendMode:layerblendmode 
                         alpha: layeralpha];

           }   

    // Get current context as an UIImage
    UIImage* finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

return finalImage;

}

Я просто хочу знать, как отменить/остановить или перезапустить запущенную очередь? Это возможно? Спасибо за вашу помощь.

5
задан Bill the Lizard 14 May 2012 в 15:12
поделиться