1

iPhone のパスに沿ってオブジェクトをアニメーション化しています。コードは を使用してうまく機能しCAKeyframeAnimationます。デバッグ目的で、画面に線を引きたいと思います。現在のを使用してそれを行うことはできないようですCGContextRef。どこを見ても、UIView をサブクラス化し、drawRect メソッドをオーバーライドして画面に描画する必要があると書かれています。とにかくこのあたりはありますか?そうでない場合、データを drawRect メソッドに渡して、何を描画するかを知るにはどうすればよいですか?

編集:わかりました。結局、UIView をサブクラス化し、drawRect メソッドで描画を実装しました。インスタンス変数を設定して setNeedsDisplay を呼び出す別のメソッド (drawPath と呼ばれる) をサブクラス化されたビューに作成することで、画面に描画することができます。次に、インスタンス変数を使用して画面に描画する drawRect メソッドを起動します。これはベストプラクティスですか?20 以上のパスを描画したい場合はどうなりますか。これらすべてのプロパティを作成する必要はありません。

4

2 に答える 2

6

UIView の drawRect メソッドに、次のようなコードを入れます

    CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(context, 1.0, 0,0 , 0.0);
CGContextSetLineWidth(context, 3.f);

CGContextBeginPath(context);
CGContextMoveToPoint(context,x1,y1);

CGContextAddLineToPoint(context, x2 , y2);
CGContextStrokePath(context);
于 2011-08-26T06:52:10.860 に答える
0

Core Graphics描画を使用する場合は、を使用してくださいCALayer。サブクラス化したくない場合は、描画をビューに委任します。

- (id)initWithFrame:(CGRect)frame 
{
    self = [super initWithFrame:frame];
    if (self) 
    {
       CALayer* myLayer = [CALayer new];
       myLayer.delegate = self;
       self.layer = myLayer;
    }
}

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
  // draw your path here
}

[self.layer setNeedsDisplay];再描画が必要な場合は、必ずお電話ください。

于 2011-08-26T04:56:24.703 に答える