1

画像とテキストを表示するカスタム UITableViewCell サブクラスがあります。画像はダウンロードされますが、テーブル ビュー セルが表示された時点でテキストをすぐに利用できます。

さまざまな場所から、複数のサブビュー (この場合は UIImageView ビューと 2 つの UILabel ビュー) を使用するよりも、ビューを 1 つだけ使用してビューの drawRect メソッドに描画する方がパフォーマンスを向上させる方がよいと読みました。

カスタム テーブル ビューのセルに画像を描画したくないdrawRectので、

  1. 画像はおそらく最初に呼び出されたときに利用できないでしょう。
  2. 誰かが drawRect を呼び出すたびに画像全体を描画したくありません。

ビュー内の画像は、誰かが画像の表示を要求した場合にのみ実行する必要があります (たとえば、ネットワーク操作が完了し、画像をレンダリングできる場合)。ただし、テキストは -drawRectメソッドで描画されます。

問題点:

  1. ダウンロードした画像を画面に表示できません。私が現在使用しているコードは-

    - (void)drawImageInView
    {
    //.. completion block after downloading from network
      if (image) { // Image downloaded from the network
        UIGraphicsBeginImageContext(rect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
        CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
        CGContextSetLineWidth(context, 1.0);
        CGContextSetTextDrawingMode(context, kCGTextFill);
    
        CGPoint posOnScreen = self.center;
        CGContextDrawImage(context, CGRectMake(posOnScreen.x - image.size.width/2,
                                           posOnScreen.y - image.size.height/2,
                                           image.size.width,
                                           image.size.height),
                                           image .CGImage);
        UIGraphicsEndImageContext();
      }
    }
    

私も試しました:

        UIGraphicsBeginImageContext(rect.size);
        [image drawInRect:rect];
        UIGraphicsEndImageContext();

無駄に。

  1. レンダリング時にテキストが画像の上に描画されるようにするにはどうすればよいですか。テキストが画像の上にレンダリングされることを確認するには、後で呼び出すだけで十分です[self setNeedsDisplay]か?UIGraphicsEndImageContext();
4

2 に答える 2

0

UILabelオブジェクトのオーバーヘッドがないため、テキストを描画するとアプリケーションが高速になるという事実は正しいですが、UIImageViewsは高度に最適化されており、おそらくこのクラスよりも高速に画像を描画することはできません. したがって、UIImageViews を使用して画像を描画することを強くお勧めします。最適化の落とし穴にはまらないでください。アプリケーションが最大限のパフォーマンスを発揮していないことがわかった場合にのみ最適化してください。

画像がダウンロードされたら、imageView の画像プロパティを画像に設定するだけで完了です。

于 2013-06-20T08:44:10.113 に答える
0

リンク先のstackoverflowページはほぼ4年前のものであり、その質問はほぼ5年前の記事にリンクしていることに注意してください. これらの記事が 2008 年に書かれたとき、現在のデバイスは iPhone 3G であり、2013 年の現在のデバイスよりもはるかに遅く (CPU と GPU の両方)、RAM がはるかに少なくなっていました。 .

いずれにせよ、パフォーマンスを測定して (おそらく Time Profiler 機器を使用して)、問題が見つかるまで、パフォーマンスについて心配する必要はありません。最も簡単で保守しやすい方法でインターフェイスを実装するだけです。次に、問題が見つかった場合は、それを修正するためにもっと複雑なことを試してください。

つまり、 aを使用しUIImageViewて画像を表示し、 aUILabelをテキストを表示するだけです。次に、遅すぎるかどうかをテストします。

テストで遅すぎることがわかった場合は、プロファイリングします。プロファイリングの方法、プロファイラーの出力の解釈方法、または問題の修正方法がわからない場合は、戻って質問を投稿し、プロファイラーの出力を含めてください。

于 2013-06-21T03:02:31.127 に答える