CGContextで日本語を描画する

DrawメソッドでCGContextを使って日本語を描画しようとしたらどうにも文字化けしてしまう。調べると本家SDKでも同じで、これはNSStringのdrawStringを使うことで回避できるとのこと。これをMonoTouchでやってみた。

public override void Draw (System.Drawing.RectangleF rect)
{
	CGContext ctx = UIGraphics.GetCurrentContext ();
	ctx.SetFillColorWithColor (UIColor.Black.CGColor);
	UIGraphics.PushContext(ctx);
	using(NSString nsText = new NSString("日本語")){
		nsText.DrawString( new PointF(0, 0), UIFont.FromName ("Helvetica", 14));
	}
	UIGraphics.PopContext();
}

GetCurrentContext で取得したコンテキストの座標系はY軸が反転しているので、線や丸の描画の前に

ctx.ScaleCTM (1, -1);

なんてしていたが、NSStringは自動で対応してくれるので必要が無かった。

これで日本語が描画できるようになったがパフォーマンスに関しては未調査。