Solo quiero prerender diferentes imágenes para un acceso rápido. Uso el despacho de grand central aquí para ejecutar los diferentes bloques.Grand Central Dispatch: ¿muestra la primera imagen cuando está cargada?
Después de iniciar la cola, quiero establecer la primera imagen cuando haya terminado. Con el código actual a continuación, lamentablemente, la primera imagen solo se mostrará cuando se hayan procesado todas las imágenes.
Entonces, ¿cómo puedo modificar el código? ¿Es posible obtener un delegado cuando cada imagen ha terminado?
tope aquí tienes el código:
// 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];
}
});
});
}
Actualización:
-(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;
}
sólo quiero saber cómo puedo cancelar/detener o reiniciar una cola de ejecución? ¿Es eso posible? Gracias por su ayuda.
¡Sí, eso resuelve el problema! Muchas gracias. Asigno el "self.image" dentro de "dispatch_async (queue,^{". ¡Ahora funciona perfecto!) Sin embargo, echaré un vistazo a la documentación sobre eso. Gracias de nuevo. – geforce