Sadece hızlı erişim için farklı görüntüleri prerender istiyorum. Farklı blokları yürütmek için büyük merkezi gönderim kullanıyorum.Grand Central Dispatch - yüklendiğinde ilk resmi gösterilsin mi?
Sırayı başlattıktan sonra, ilk resmi bittiğinde ayarlamak istiyorum. Aşağıdaki geçerli kodla, maalesef ilk görüntü tüm görüntüler oluşturulduğunda görüntülenecektir.
Kodları nasıl değiştirebilirim? Her görüntü bittiğinde bir temsilci almak mümkün mü?
Here's kodu:
// 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];
}
});
});
}
Güncelleme: ben sadece durdurma/iptal edebilir veya çalışan kuyruğunu yeniden nasıl bilmek istiyorum
-(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;
}
? Bu mümkün mü? Yardımlarınız için teşekkürler.
Evet, bu problemi çözer! Çok teşekkür ederim. "Self.image" öğesini "dispatch_async (queue,^{") içinde atayım. Şimdi mükemmel çalışıyor! Yine de bu konuyla ilgili belgelere bir göz atacağım. Tekrar teşekkürler. – geforce