2012-02-06 8 views
2

私はEnormegoのEGOImageViewを使用したので、インターネットからダウンロードした写真のギャラリービューを持っています。私は、画像がキャッシュに入ってからテーブルビューをスクロールすると、スクロールが遅くなることに気付きました。私はすぐに画像がreturn [UIImage imageWithContentsOfFile:cachePathForKey(key)];でハードドライブから取得されたときにメインスレッドで作業していたので、操作をNSOperationQueueに追加したことがすぐに分かりました。これは遅れを半分に減らしましたが、スクロールはまだ乱雑でした。コードを通過した後、私は成功方法uitableviewcellのUIImageViewのsetImageはiOSのスクロールに遅れます

- (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

おかげ

+1

私は、画像がself.imageフレームにフィットするようにサイズ変更されていると思います。それは事実ですか?以前にサイズを変更しようとしましたか? – Gabriel

+0

@Gabriel私はしていない!私はまったくそれを考慮しなかった。やってみます! –

+0

@AndrewParkこれをどのように最適化するかを知りましたか? – bogardon

答えて

0

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

0
  1. サブクラスのUITableViewCellがあり、drawContentViewで独自drowingを行います。
  2. イメージをバックグラウンドスレッドでサイズ変更し、セルに表示します。

P.S:git hubで見つかったコードが十分でない場合は、問題に適したコードを作成してください。

関連する問題