0

CGBitmapContextCreate 呼び出しを使用して独自のコンテキストを作成しています。コンテキストが正常に作成されました。CGContextDrawImage の呼び出しを使用して、このコンテキストで UIImage を正常に描画できます。しかし、UIImage の drawPatternInRect: 呼び出しを使用しようとすると、「Context is nil」というエラーが表示されます。

CGContextDrawImage が同じコンテキストで正常に動作しているため、 context は nil ではなく、適切に作成されていると確信しています。drawPatternInRect: 呼び出しは、コンテキストが UIView の場合、または UIView の drawRect メソッドでコンテキストを作成した場合にのみ正常に機能します。ただし、このコンテキストから UIImage を生成する必要があるため、UIView のコンテキストを使用できません。

ここで何が問題なのか、または drawPatternInRect の他の代替の単純な方法を知っている人はいますか?

4

1 に答える 1

0

Cocoa のグラフィックス コンテキストに関連する追加の概念があります。Core Graphics には、すべての CG 描画呼び出しに明示的なパラメーターとして渡す必要がある CGContextRef があります。iOS の他の多くの場所では、多くの描画呼び出しに対する暗黙のパラメーターとして、グローバルな現在のコンテキスト (スレッドごとにグローバル) である現在のコンテキストの概念があります。UIImage を含む多くの API は、現在のコンテキストで描画します。ヘッダー UIGraphics.h を参照してください。

通常、現在のコンテキストは、 drawRect: が呼び出される前にビュー システムによってセットアップされます。これが、これらの場合に描画が機能するように見える理由です。自分でコンテキストを作成した場合は、現在のコンテキストを明示的に設定する必要があります。このコードはあなたのために働くはずです:

UIGraphicsPushContext( yourCGContext );

// Do your drawing here

UIGraphicsPopContext();

Mac では、NSGraphics コンテキストを使用しても同様です。 NSGraphicsContextに関する Apple のドキュメントを参照してください。

NSGraphicsContext* nsGraphicsContext = [ NSGraphicsContext 
        graphicsContextWithGraphicsPort: yourCGContext flipped: NO ];
[ NSGraphicsContext saveGraphicsState ];
[ NSGraphicsContext setCurrentContext: nsGraphicsContext ];

// Do your drawing here

[ NSGraphicsContext restoreGraphicsState ];
于 2011-01-10T15:48:16.687 に答える