0

なぜ Quartz 2D グラフィックス コンテキスト関数は drawRect メソッド内から呼び出さなければならないのですか?

drawRect 以外の場所から CGGraphics コンテキスト関数を呼び出すと、次のようなメッセージが表示されるためです。

<Error>: CGContextFillRects: invalid context
<Error>: CGContextSetFillColorWithColor: invalid context

実際、UIView のサブクラスでは、Render というメソッドで Graphics Context をセットアップします。Render が呼び出されると、上記のエラーが発生します。

- (void)Render {
    CGContextRef g = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(g, [UIColor blueColor].CGColor);
    CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
    CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor);
    [@"It works!" drawAtPoint:CGPointMake(10.0, 20.0) withFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]];
    NSLog(@"gsTest Render");
}
4

2 に答える 2

3

彼らはしません。もう少し詳しく説明する必要があるかもしれません。

Cocoa は drawRect 実装を呼び出す前にコンテキストをセットアップします。別の場所に何かを描きたい場合は、その設定作業はあなたの責任です。

于 2009-12-17T22:59:49.370 に答える
2

UIGraphicsGetCurrentContextは、フレームワークによって設定されたスタックからグラフィックスコンテキストを取得します。UIKitは、drawRectメソッドが呼び出されたときに、有効なグラフィックスコンテキストがこのスタックにプッシュされていることを保証します。そこから戻ると、このスタックがポップされます。drawRect関数の外部で呼び出すと、無効になります。

代わりに、drawRectの外部で呼び出したい場合は、独自のグラフィックコンテキストを作成/取得して、そこに描画する必要があります。

NSString drawAtPoint:withFontなどの一部の描画関数もこのスタックを利用します。現在のコンテキストが有効でない場合は、UIGraphicsPushContextを呼び出す必要があります

于 2009-12-18T00:47:23.813 に答える