2

インターネットからダウンロードした写真のギャラリー ビューがあるので、Enormego の EGOImageView を使用しました。画像がキャッシュに入った後にテーブルビューを下にスクロールすると、スクロールが遅れることに気付きました。イメージがハード ドライブから取得されたときreturn [UIImage imageWithContentsOfFile:cachePathForKey(key)];、メイン スレッドで動作していることがすぐにわかったので、操作を NSOperationQueue に追加しました。これにより、ラグが半分に短縮されましたが、スクロールはまだ途切れていました. コードを調べた後、成功メソッドであることに気付きました

- (void)imageLoaderDidLoad:(NSNotification*)notification {
    if(![[[notification userInfo] objectForKey:@"imageURL"] isEqual:self.imageURL]) return;

    UIImage* anImage = [[notification userInfo] objectForKey:@"image"];
    self.image = anImage;
    [self setNeedsDisplay];

    if([self.delegate respondsToSelector:@selector(imageViewLoadedImage:)]) {
        [self.delegate imageViewLoadedImage:self];
    }
}

コメントアウトするself.image = anImage;と、ラグが完全に解消されます(ただし、明らかに画像が表示されません)。私が知る限り、UI を変更したい場合は、メイン スレッドで行う必要があります。スクロールを遅らせずに EGOImageView の画像を設定する方法はありますか?

注: JPG は約 50kB です

ありがとう

4

2 に答える 2

0
  1. uitableViewCell をサブクラス化し、drawContentView で独自の描画を行います。
  2. バックグラウンド スレッドで画像のサイズを変更し、セルに表示します。

PS: git ハブにあるコードでは不十分な場合は、問題に合った独自のコードを作成してみてください。

于 2012-02-06T07:34:50.830 に答える
0

私が理解していることから、非同期ディスククエリを開始するために必要なすべてのステップは、メインスレッドで数ミリ秒かかり、スクロールが途切れるように見えるのに十分な時間であるため、大きな画像のハードドライブキャッシュを完全に削除することにしました。代わりに、UIImage をオブジェクトとして、NSURL.absoluteString をキーとして保持する NSMutableDictionary を作成します。これはシームレスに機能しますが、明らかにメモリを大量に消費するという欠点があります。いくつかの写真共有アプリのメモリ使用量を調べたところ、アプリのメモリ使用量が 100MB を超えていたので、他の誰もがこれを行っているようです。

于 2012-04-20T03:37:47.663 に答える