2013-04-01 4 views
0

Мне нужно иметь возможность рисовать пользовательские шрифты в CGContext, но когда я изменяю способ выбора шрифта, шрифт не отображается.Рендеринг пользовательских шрифтов с использованием MonoTouch & CoreGraphics

//Works 
    protected void DrawCenteredTextAtPoint(CGContext context, float centerX, float y, string text, int textHeight) 
    { 
     context.SelectFont("Helvetica-Bold", textHeight, CGTextEncoding.MacRoman); 
     context.SetTextDrawingMode(CGTextDrawingMode.Invisible); 
     context.ShowTextAtPoint(centerX, y, text, text.Length); 
     context.SetTextDrawingMode(CGTextDrawingMode.Fill); 
     context.ShowTextAtPoint(centerX - (context.TextPosition.X - centerX)/2, y, text, text.Length); 
    } 

//Does not work 
protected void DrawCenteredTextAtPoint(CGContext context, float centerX, float y, string text, int textHeight) 
{ 
    var fontPath = NSBundle.MainBundle.PathForResource("COOPBL", "ttf", "fonts", ""); 
    var provider = new CGDataProvider(fontPath); 
    var font = CGFont.CreateFromProvider(provider); 
    context.SetFont(font); 
    context.SetTextDrawingMode(CGTextDrawingMode.Invisible); 
    context.ShowTextAtPoint(centerX, y, text, text.Length); 
    context.SetTextDrawingMode(CGTextDrawingMode.Fill); 
    context.ShowTextAtPoint(centerX - (context.TextPosition.X - centerX)/2, y, text, text.Length); 
} 
+0

Вы пытались использовать свой собственный шрифт в более простых местах? Например, вызовите 'UILabel.Font = UIFont.FromName (fn, 17);', где fn = "COOPBL". Я задаю вопрос, когда вы добавляете шрифт в cproj-файл в Xamarin Studio, он не помечен как Content in Build Action. Таким образом, возможно, шрифт неправильно включен в проект. –

ответ

0

Это работает:

protected void DrawCenteredTextAtPoint(CGContext context, float centerX, float y, string text, int textHeight) 
    { 
     //   var fontPath = NSBundle.MainBundle.PathForResource("COOPBL", "ttf", "fonts", ""); 
     //   var provider = new CGDataProvider(fontPath); 
     //   var font = CGFont.CreateFromProvider(provider); 

     //context.SelectFont("Helvetica-Bold", textHeight, CGTextEncoding.MacRoman); 
     //var cgFont = CGFont.CreateWithFontName("Cooper Black"); 
     //context.SetFont(cgFont); 

     context.SelectFont("Cooper Black", textHeight, CGTextEncoding.MacRoman); 

     context.SetTextDrawingMode(CGTextDrawingMode.Invisible); 
     context.ShowTextAtPoint(centerX, y, text, text.Length); 
     context.SetTextDrawingMode(CGTextDrawingMode.Fill); 
     context.ShowTextAtPoint(centerX - (context.TextPosition.X - centerX)/2, y, text, text.Length); 
    } 

Как я использую это

... 

public class CustomView: UIView 
{ 
    public CustomView() 
    { 
    } 

    public override void Draw (System.Drawing.RectangleF rect) 
    { 
     base.Draw (rect); 

     var context = UIGraphics.GetCurrentContext(); 
     DrawCenteredTextAtPoint(UIGraphics.GetCurrentContext(), 50, 10, "adsasdasd", 20); 
    } 

... 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     v = new CustomView(); 
     v.BackgroundColor = UIColor.Red; 
     View.AddSubview(v); 
     v.Frame = new RectangleF(0, 100, 320, 100); 

... 

Как это выглядит с Cooper Black шрифта:

enter image description here

PLE ase Обратите внимание, что вы должны правильно добавить шрифт в проект:

  • Добавить ссылку файла шрифта на cproj-файл;
  • Отметьте файл шрифта как Content в Build Action;
  • Добавить ссылку файла шрифта на Info.plist file.

Примечания: http://fastchicken.co.nz/2012/09/07/using-fonts-in-a-monotouch-app/.

Смежные вопросы