gcd を使用してバックグラウンドで画像を読み込もうとしています。私の最初の試みはうまくいきませんでした:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
// create UI Image, add to subview
});
});
バックグラウンド キュー コードをコメント アウトし、メイン キュー ディスパッチ ブロックだけを残しても機能しませんでした。
dispatch_async(dispatch_get_main_queue(), ^{
// create UI Image, add to subview
});
gcd ブロック内で ui を行うためのトリックはありますか?
mattjgaloway のコメントに応えて、バックグラウンド スレッドに大きな画像を読み込もうとしているだけです。最初に試した完全なコードは次のとおりです。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0), ^{
UIImage* img = [[UIImage alloc] initWithContentsOfFile: path];
dispatch_async(dispatch_get_main_queue(), ^{
imageView = [[[UIImageView alloc] initWithImage: img] autorelease];
imageView.contentMode = UIViewContentModeScaleAspectFill;
CGRect photoFrame = self.frame;
imageView.frame = photoFrame;
[self addSubview:imageView];
});
});
メインキュー内ですべてを実行するように単純化しましたが、それでも機能しませんでした。メイン キューですべてを機能させることができない場合、バックグラウンド キューが機能する方法はありません。
================ 更新 ==============
上記の手法 (gcd とすべて) を新しいプロジェクトで試してみましたが、実際に期待どおりに機能します。私の現在のプロジェクトではありません。そのため、何がうまくいかないのかを突き止めるために、ゆっくりと苦痛を伴う除去作業を行う必要があります。このバックグラウンド読み込みを使用して、uiscrollview に画像を表示しています。画像の一部が表示されることがありますが、常に表示されるわけではありません。私はこれの底に行きます....
================ 更新 ==============
この問題は UIScrollView に関連しているように見えますが、これはすべて内部にあります。必要なときに描画/更新されていないと思います