0

件名の呼び出しを機能させるのに問題があります。以下のテストでは、2つのオレンジ色と1つの緑色の長方形を描画する必要があります。

これが以下のコードの私の理解です...

  • 50,50でオレンジ色の長方形を描きます
  • 現在のコンテキストを送信して、200,200でdrawgreenRectを呼び出します
  • スタック上の現在のコンテキストをプッシュし、ストロークの色を変更して、100,100で緑色の四角形を描画します
  • 元のコンテキストを復元する必要がある現在のコンテキストをポップします(オレンジ色のストロークの色)
  • 次に、オレンジ色をなでるはずの最後の長方形を描きます

最後の長方形はオレンジ色にストロークするはずですが、緑色にストロークしており、元のコンテキストを変更したことを示しています

考え?

- (void)drawRect:(CGRect)rect{

CGRect aRectangle=CGRectMake(50., 50., 40., 40.);
UIBezierPath *path=[UIBezierPath bezierPathWithRect:aRectangle];
UIColor *strokeColor=[UIColor orangeColor];
[strokeColor setStroke];
[path stroke];

CGContextRef context=UIGraphicsGetCurrentContext();

[self drawGreenRect:context];

CGRect anotherRectangle=CGRectMake(100., 100., 40., 40.);
UIBezierPath *anotherPath=[UIBezierPath bezierPathWithRect:anotherRectangle];
[anotherPath stroke];

}

- (void)drawGreenRect:(CGContextRef)ctxt{

UIGraphicsPushContext(UIGraphicsGetCurrentContext());

CGRect aRectangle=CGRectMake(200., 200., 40., 40.);
UIBezierPath *path=[UIBezierPath bezierPathWithRect:aRectangle];
UIColor *strokeColor=[UIColor greenColor];
[strokeColor setStroke];
[path stroke];

 UIGraphicsPopContext();

}

4

1 に答える 1

1

UIGraphicsPushContext()新しいコンテキストを作成するのではなく、渡したコンテキストをスタックにプッシュするだけです。したがって、 を実行するUIGraphicsPushContext(UIGraphicsGetCurrentContext());と、グラフィックス コンテキスト スタックが 2 階層になりますが、その上のアイテムは両方とも同じコンテキストであり、ビューによって設定されたものです。

ほとんどの場合、 を使用して、プッシュするコンテキストを実際に作成する必要がありますUIGraphicsBeginImageContext()。次に、そのコンテキストから画像を取得して、ビューに配置できます。

于 2012-09-11T22:35:02.320 に答える