画像カタログ iPad アプリケーションを構築しています。低解像度のサムネイル (250 * 500 ピクセル) と高解像度のフル イメージ (2048X2048 ピクセル) の 2 種類の画像を使用しています。高解像度画像のサイズはそれぞれ 200kb から 10mb です。高解像度の画像をダウンロードするための遅延読み込みとマルチスレッドを実装しました。
画像カタログ アプリケーションであるため、合計画像数は 200 から 500 の間です。このアプリケーションにはオフライン サポートがあるため、ダウンロードしたすべての画像を後で表示するために画像をアプリケーション ドキュメント ディレクトリに保存しています。画像をアルファベット順に並べ替える機能があるため、UIScrollView を使用してすべての低解像度画像を同時に画面に表示する必要があります。
新しい高解像度画像が呼び出されると、画像が初めて開かれるたびに、ほとんどの場合、画像は 3 ~ 8 秒かかります。これにより、アプリがほとんどフリーズし、ユーザーは他の操作を行う前に 3 ~ 8 秒待たなければなりません。
私の開発者は、現在のイメージが完全にメモリにダウンロードされるまで、ユーザーが現在のアクションを停止して次のイメージに移動できるようにする簡単な方法はないと言っています。
専門家は、高解像度画像がダウンロードされているときに、ユーザーのアクションが現在の高解像度画像のダウンロードに取って代わるようにコードを実装できるはずだと思いますか. たとえば、指でスワイプすると、ヘッダー バー (戻るボタン、設定ボタンを含む) が有効になり、ユーザーは次の画像に移動しますか?
迅速な返信ありがとうございます。しかし、質問で述べたように、遅延読み込み/マルチスレッドを使用しました。つまり、NSURLConnection 非同期要求を使用しました。テキストデータでなくても、ダウンロードにはメインスレッドを使用していません。
NSURLConnection とデリゲートを使用して Image Downloader クラスを作成しました。各画像のリクエストの成功/失敗後に、対応するコントローラーに通知を送信するカスタム プロトコルを作成しました。
@protocol TImageDownloaderDelegate
-(void)imageDownloadedSuccessfully:(ImageDownloader *)inDownloader;
-(void)prImageDownloadedSuccessfully :(ImageDownloader *)inDownloader;
@end
問題は、UIScrollView を使用して同じ画面に複数の (160 を超える) 画像があり、各画像に高解像度の画像 (200KB から 10 MB のサイズ) があり、高解像度の画像をダウンロードしていて、各画像をダウンロードした直後に、爽やかな景色です。そのため、ビューを何度もレンダリングしている間、スクロールがあまりスムーズにならないことがあります。そのため、アプリケーションのパフォーマンスを改善する方法を探しています。