Voglio solo prerenderare immagini diverse per un accesso veloce. Uso qui il grand central dispatch per eseguire i diversi blocchi.Grand Central Dispatch: mostra la prima immagine quando viene caricata?
Dopo aver avviato la coda, desidero impostare la prima immagine al termine. Con il codice corrente sotto, sfortunatamente la prima immagine verrà visualizzata solo quando tutte le immagini sono state renderizzate.
Quindi, come posso modificare il codice? È possibile ottenere un delegato al termine di ogni immagine?
Here's il codice:
// 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];
}
});
});
}
Aggiornamento:
-(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;
}
voglio solo sapere come faccio a cancellare/arrestare o riavviare una coda di esecuzione? È possibile? Grazie per il vostro aiuto.
Sì, questo risolve il problema! Grazie mille. Assegno il "self.image" all'interno di "dispatch_async (queue,^{". Ora funziona perfettamente! Tuttavia darò un'occhiata alla documentazione al riguardo. Grazie ancora. – geforce