4

iOS で均一な色の不透明でグラデーションのない円形をレンダリングする場合、次の 3 つの方法が考えられます。

circle-icon.pngやのような画像を使用しますcircle-icon@2px.png。次に、次のコードを実装して、iOS に適切なサイズを自動的にレンダリングさせることができます。

UIImage *image = [UIImage imageNamed:@"circle-icon"];
self.closeIcon = [[UIImageView alloc] initWithImage:image];
self.closeIcon.frame = CGRectMake(300, 16, image.size.width, image.size.height);

次のように、丸みを帯びた角をレンダリングし、レイヤーを使用します。

self.circleView = [[UIView alloc] initWithFrame:CGRectMake(10,20,100,100)];
circleView.alpha = 0.5;
self.circleView.layer.cornerRadius = 50;
self.circleView.backgroundColor = [UIColor blueColor];

ネイティブ描画ライブラリを使用して、次のようなものを使用しますCGContextFillEllipseInRect

これら 3 つのアプローチの正確なパフォーマンスとメンテナンスのトレードオフは何ですか?

4

3 に答える 3

3

最も鮮明で見栄えの良い結果は、円を希望するサイズと正確に一致する適切に描画された画像を作成することです。円のサイズを変更すると、希望する外観が得られないことが多く、それに伴うオーバーヘッドが発生します。

クリーンさとスピードの最高のパフォーマンスは、コアグラフィックスとその四角形の追加楕円を使用することで得られると思います。

CGPathRef roundPath = CGPathCreateMutable();       
CGRect rectThatIsASquare = CGRectMake(0, 0, 40, 40);
CGPathAddEllipseInRect(roundPath, NULL, rectThatIsASquare);
CGContextSetRGBFillColor(context, 0.7, 0.6, 0.5, 1.0);

CGContextFillPath(context);
于 2013-08-21T00:51:51.743 に答える
3

あなたは別の非常に論理的な代替案を見落としていUIBezierPathますCAShapeLayer. UIBezierPath円を作成し、それCAShapeLayerを使用する を作成し、UIBezierPathそのレイヤーをビュー/レイヤー階層に追加します。

  1. プロジェクトに QuartzCore フレームワークを追加します

  2. 次に、適切なヘッダーをインポートします。

    #import <QuartzCore/QuartzCore.h>
    
  3. CAShapeLayer次に、ビューのレイヤーに a を追加できます。

    UIBezierPath *path = [UIBezierPath bezierPath];
    [path addArcWithCenter:CGPointMake(self.view.bounds.size.width / 2.0, self.view.bounds.size.height / 2.0) radius:self.view.bounds.size.width * 0.40 startAngle:0 endAngle:M_PI * 2.0 clockwise:YES];
    CAShapeLayer *layer = [[CAShapeLayer alloc] init];
    layer.path = [path CGPath];
    layer.fillColor = [[UIColor blueColor] CGColor];
    [self.view.layer addSublayer:layer];
    

CoreGraphics の実装、またはこの実装は、PNG ファイルや角の丸いオブジェクトCAShapeLayerよりも理にかなっていると思います。UIView

于 2013-08-21T01:33:46.630 に答える
1

個人的には、あなたは問題を考えすぎていると思います。いくつかの円しか描いていない場合、どちらを選択しても、パフォーマンス/メンテナンスへの影響はほとんどありません。たとえそれを最適化しても、ユーザーは何のメリットも得られません. あなたが今していることは何でもしてください。アプリのコンテンツを素晴らしいものにすることに集中し、本当に必要な場合は後でパフォーマンスに戻ってください。

そうは言っても、描画ライブラリを使用することをお勧めします。

  1. 角を丸めるのは遅く、直感的ではありません
  2. 色の変更などを行う場合、画像ファイルの使用は問題になります。また、画像を拡大縮小した後、見栄えがよくない場合もあります。
于 2013-08-21T00:25:40.887 に答える