0

ipad用のカスタムPDFリーダーを開発しています。対応するPDFページの同等のサムネイルが表示されるaを取得しUIScrollViewて追加/削除しました。スクロールに追加されるとすぐに、を作成して追加します。バックグラウンドでPDFサムネイルを生成するためのビュー。スクロールビューにはいつでも3つのUIViewがあります。小さいPDFファイルは高速でレンダリングされるため、全体の配置は正常に機能しますが、問題は大きい/複雑なPDFページにあります。私の実装によると、ユーザーが特定のページでナビゲーションを離れる場合は、3つありますUIViewsNSOperationNSOperationQueueUIViewNSOperations同時にバックグラウンドで作業して3つのサムネイル(前のページ用、現在のページ用、次のページ用)を生成するため、全体として現在のページを表示するのに時間がかかります。すべてのライブNSOperationオブジェクトを繰り返し処理して設定しました。 scrollViewDidEndDecelerating:メソッドで現在のページのサムネイルをレンダリングすることを想定しているものよりも優先度が高いですが、機能せず、結果の効果は同じです。事前に、問題を解決する方法を提案してください。

4

1 に答える 1

0

バックグラウンドで動作するように設定NSOperationQueueした場合(つまり、呼び出していない場合[NSOperationQueue mainQueue]。タスクは非同期で完了する必要がありますが、メインスレッドで実行されているビューはかなり後になるまで更新されません。優先度レベルは重要ではありません。アクションが発生するスレッドとは関係ありません。解決策は、次を追加することです。

-(void)main {

    // ** load PDF image **

    [self performSelectorOnMainThread:@selector(insertImageLoaded:)
                            withObject:img
                        waitUntilDone:YES];

}

基本的に、覚えておかなければならないのは、iOSが小さなスレッドプールを作成することです。これは、NSOperationsよりもGCDを使用するとはるかに目立ちます。

于 2012-11-20T16:07:52.747 に答える