私はちょうど高速アクセスのために異なったイメージをprerenderしたいです。 ここでは、さまざまなブロックを実行するためにグランドセントラルディスパッチを使用します。Grand Central Dispatch - 最初の画像がロードされたら表示しますか?
キューを開始した後、最初のイメージを設定します。 以下のコードでは、残念ながら最初の画像はすべての画像がレンダリングされたときにのみ表示されます。
コードを変更するにはどうすればよいですか?各画像が完成したらデリゲートを取得することは可能ですか?
Here'sコード:
// 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;
}
私はちょうど私が/停止を解除または実行中のキューを再起動しない方法を知りたいですか? これは可能ですか? ご協力いただきありがとうございます。
ええ、それは問題を解決します!どうもありがとうございました。私は "self.image"を "dispatch_async(queue、^ {"。)内に割り当てますが、今は完璧に動作します!それでも、私はそのドキュメントを見ていきます。 – geforce