3

環境:

「フォトモザイク」アプリを作成していて、1024(32 * 32)個の小さな画像(網膜サイズ-> w:30px h:20px)を同時に画面に表示しようとしています。つまり、全体として、フルスクリーンの画像サイズと同じサイズになります。

問題:

1024個のUIImageをロードし、1024個のUIImageViewを作成して、それらすべてをUIViewに追加します。このビューまでスクロールすると、大きな遅れがあります。iPhone4(iOS 5)とiPhone5(iOS 6)でテストします。iPhone4に表示されるだけで、iPhone5でも問題ありません。(iPhone5のCPUがはるかに優れていると仮定すると、それは合理的だと思います)。

私の考え:

すべての画像がメモリ内のローカルディレクトリからすでにロードされていると仮定すると(メソッド "imageNamed"を使用)、問題は画像の表示/レンダリングのステップのどこかにあるはずだと思います。

それで、それについて何か考えはありますか?いずれにせよ、どんなアイデアも役に立ちます。

本当にありがとう、

アップデート

@Antwan van Houdtからアドバイスを受けた後は、はるかに良いです。原則コードは次のとおりです。

-(void)updateCoverImageView:(UIImageView *)smallImage{
    UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0f);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [self.coverImageView.layer renderInContext:ctx];
    [smallImage.image drawInRect:smallImage.frame];
    self.coverImageView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

次に、smallImageのアルファ値をゼロに設定するだけなので、システムはそれらをレンダリングしません。そして、表紙の画像がそれに置き換わります。これは、大量のUIViewを同時に表示することによって発生するラグの問題に対して機能します。

4

2 に答える 2

3

すべての画像は独自のビューにありますか?

いずれの場合も、このような大量の画像の場合は、おそらく1つのビューで画像を描画することを検討する必要があります。それでも描画方法が遅すぎる場合は、一度描画してから、ビューを画像にレンダリングしてから、キャッシュされた状態でその画像を描画するだけです。画面。

カスタムビューの描画やそのようなもののパフォーマンスを扱うアップルから入手可能ないくつかのガイドがあります..あなたはそれらを読む必要があります。

于 2012-12-08T14:19:00.973 に答える
0

コードの完全な詳細がわからない場合、このようなことはバックグラウンドスレッドで実行する必要があります。グラフィックコンテキスト、グランドセントラルディスパッチを読み、両方の概念を使用して別のスレッドで結果の画像を作成し、結果の画像を取得してメインスレッドに表示します。

実際、すべてを並行して処理できる多くの画像があるため、GCDを使用すると非常に高速に処理できます。

あなたがコードを投稿することができれば、私はあなたがそれを最適化するのを手伝うことができます。

于 2012-12-08T14:26:27.547 に答える