2011-10-06 10 views
3

Windows 글꼴 (calibri.ttf)을 사용하여 텍스트를 그리는 사용자 지정보기가 있습니다. 그러나 DrawString & ShowText 기능을 사용하는 사이에 다른 동작이 나타납니다.ShowText를 사용할 때 사용자 지정 글꼴이 올바르게 렌더링되지 않습니다.

내가 응용 프로그램의 일환으로 폰트를 내장 한합니다 (UIAppFonts 목록이 내용에 조치를 구축입니다 & 세트에 추가) 내가 예를 들어, 내 사용자 지정 UIView의에서 DrawString 방법을 사용할 때 모두가 잘 작동

Using Calibri font with DrawString

그러나

코드

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"); 
} 

결과

Result using FontSpecific encoding and ShowTextAtPoint

UPDATE - 여기에 내가 MacRoman 인코딩 대신 FontSpecific 사용하는 경우 내가 무엇을 얻을 수 있습니다 :

,536을

Result using MacRoman encoding and ShowTextAtPoint

글꼴을 수동으로로드하고 사용했지만 그다지 아무것도 얻지 못했습니다. 글꼴을 인식하지 못하는 것 같습니다.

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는 UIKit & ShowText입니다 CG (석영) 것을 알고 그래서 차이가있을 수 있음을 이해합니다. 그러나, 내가 DrawString과 유일한 차이점을 모았던 점은 Offset (왼쪽 아래에있는 CG/왼쪽 상단에있는 UIKit)의 차이로 문제를 해결했습니다.

참고 -이 글꼴을 사용하여 사용자 지정 CALayerDelegate를 통해 레이어에 텍스트를 그릴 필요가 있습니다. 나는 그곳에서 DrawString 함수에 접근 할 수 없기 때문에, 텍스트를 그릴 때 볼 수있는 유일한 방법은 ShowText입니다. 대체 솔루션을 환영합니다!

+0

해결 방법을 찾으셨습니까? –

+0

@JC Fraid 아니 (따라서 질문이 아직 열려있는 이유). 나는이 문제가 실제로 Calibri font와 iOS 사이의 호환성이라고 생각하지만 아직 확인되지는 못했습니다. 나는 결국 유사한 미리 만들어진 글꼴 (Verdana)을 사용하는 것으로 되돌아갔습니다. – James

+1

나는 Calibri와 비슷한 글꼴 인 CartoGothicStd를 발견했습니다. OTF에서 TTF로 변환해야했지만 작동합니다. –

답변

1

이것은 실제로 인코딩 문제와 비슷합니다. CGTextEncoding.FontSpecific 대신 CGTextEncoding.MacRoman을 사용하십시오 (예 : Arial이 FontSpecific으로 예상대로 렌더링되지 않음).애플 문서가 특별히 states 함께 SetFontShowText를 사용하지 않는 때문에

UPDATE 년 10 월 12 일

는) 마지막 코드 샘플이 작동하지 않습니다. 따옴표는 다음과 같습니다 :

Quartz는 시스템에서 제공하는 글꼴 데이터를 사용하여 현재 글꼴의 인코딩 벡터를 통해 배열의 각 바이트를 매핑하여 표시 할 글리프를 가져옵니다. 글꼴은 CGContextSelectFont를 사용하여 설정해야합니다. CGContextSetFont와 함께 CGContextShowText를 사용하지 마십시오.

b) CGTextEncoding.MacRoman 코드는 여러 가지 iPhone 제공 글꼴과 함께 작동합니다. 나는 그것이 iOS에서 지원하지 않는 글꼴 그 자체 인 Calibri.ttf에 대한 것으로 의심되기 시작했습니다.

+0

둘 다 시도하고'CGTextEncoding.MacRoman'을 사용할 때 기억할 수있는 것으로부터 물음표가 표시됩니다. 나는 그것을 다시 시도하고 결과를 게시합니다. – James

+0

결과를 게시했습니다. 의심스러운 점은 물음표가 나옵니다. 나는 이것이 인코딩 문제라는 점에 의심의 여지가 없다. 그러나 나는 UIKit이 CG와 다르게 무엇을하는지 모른다. 이것에 대해 좀 밝혀 주시겠습니까? – James

+0

지금까지 Arial 만 사용해 봤지만 글꼴을 (Windows VM에서) 찾아서 문제를 복제하려고합니다. – poupou

관련 문제