Windows フォント (calibri.ttf) を使用してテキストを描画しようとしているカスタム ビューがあります。ただし、DrawString
&ShowText
関数を使用すると、動作が異なります。
アプリの一部としてフォントを埋め込みました ( UIAppFontsリストに追加し、そのビルド アクションをContentDrawString
に設定します) 。カスタム UIViewのメソッドを使用すると、すべて正常に動作します。
コード
public override void Draw (System.Drawing.RectangleF rect)
{
base.Draw (rect);
DrawString("Calibri font via DrawString", new RectangleF(10, 10, 100, 100), UIFont.FromName("Calibri", 16f));
}
結果
ただし、今回同じテキストを描画しようとShowText
すると、フォントがテキストを正しくエンコードしていないか、文字マッピングが間違っているように見えます。
コード
public override void Draw (System.Drawing.RectangleF rect)
{
base.Draw (rect);
var ctx = UIGraphics.GetCurrentContext();
ctx.SelectFont("Calibri", 16f, MonoTouch.CoreGraphics.CGTextEncoding.FontSpecific);
ctx.ShowTextAtPoint(10, 10, "Calibri font via ShowText using SelectFont");
}
結果
更新-MacRoman
の代わりにエンコーディングを使用すると、次のようになりFontSpecific
ます。
また、フォントを手動でロードして使用しようとしましたが、何も得られません。フォントを認識していないようです。
var fontPath = NSBundle.MainBundle.PathForResource("calibri", "ttf");
var provider = new CGDataProvider(fontPath);
var font = CGFont.CreateFromProvider(provider);
var ctx = UIGraphics.GetCurrentContext();
ctx.SetFont(font);
ctx.ShowTextAtPoint(10, 20, "Calibri font via ShowText using SetFont");
私はそれDrawString
が UIKitShowText
であり CG (Quartz) であることを知っているので、違いがあるかもしれないことを理解しています。ただし、私が収集したものから、DrawString との唯一の違いは、オフセットの違いの問題を修正したことです (CG は左下にあり、UIKit は左上にあります)。
注 - 私が抱えている根本的な問題は、このフォントを使用して、カスタム CALayerDelegate を介してレイヤーにテキストを描画する必要があることです。そこから関数にアクセスできないDrawString
ため、テキストを描画する唯一の方法はShowText
. 代替ソリューションは大歓迎です!