2011-12-09 10 views
0

私は主なスレッドでUIが更新されていることを覚えていると思いますが、私の問題は1000 +画像のUIScrollViewを持っていて、すぐに表示される画像を切り替えるルーチンを書きましたその実際のイメージを表示するためのビュー、および可視のビューから外れたときにプレースホルダイメージに切り替わります。すべてのオフスクリーンイメージは同じプレースホルダを共有し、メモリ負荷を大幅に削減します。NSOperationQueue/NSOperationInvocationを使用して私のUIScrollViewの内容を更新できないのはなぜですか?

私は、ビューの次の数個のタイルをオン/オフに切り替える2つの方法を書いており、ある方向に十分にスクロールした場合にはキックオフされます。スクロールは、UIScrollViewDelegateコールバックメソッドscrollViewDidScrollを介して検出されます。

この戦略はうまくいきますが、スクロールバーのスクロールは低速デバイス(iPad 1)でちょっとジッタがあります。パフォーマンスを向上させたいので、スクロールビューの内容を更新する2つのメソッドがNSOperationInvocationで、NSOperationQueueに追加されるようにコードを変更できると考えました。

しかし、これを行うと、たとえ優先度がVeryHighに設定されていても、スクロールするときにUIが更新されず、待ち行列が大きくなります。観察された動作は、画像がプレースホルダー画像を保持し、オンにならないことです。

なぜこれは機能しませんか? NSOperationInvocationため

コード:

ImageThumbView *thumb = [boardThumbsArray objectAtIndex:lowestLoadedThumbTag - i]; 
    [loadedThumbsArray addObject:thumb]; 
    [thumb showThumbImage]; 

ImageThumbViewは、Appleの "PhotoScroller" のサンプルコードでUIButtonサブクラス

- (void)showThumbImage { 

if (thumbImagePath != nil) { 
    thumbImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL fileURLWithPath:thumbImagePath]]]; 
} else { 
    NSLog(@"%@", @"Cannot show thumb image: thumbImagePath is nil"); 
} 

[self setBackgroundImage:thumbImage forState:UIControlStateNormal]; 
[self setNeedsDisplay]; 

}

答えて

0

ルックです。あなたはscrollviewのサブビューとして1000のビューを持っているべきではありません。もう見えないものをリサイクルしてください。

また、WWDC 2010の「スクロールビューによるアプリケーションの設計」ビデオもご覧ください。フォトコントローラのサンプルコードを説明します。

ありがとうございました