2012-11-25 3 views
3

대부분의 경우 작동하는 코어 텍스트를 사용하여 사용자 정의 TTF 글꼴 (scheherazade)로 iOS 응용 프로그램에서 아랍어 텍스트를 렌더링하려고합니다. 그러나 CTFrame 가장자리의 특정 글리프가 삭제됩니다 .CTFrame 가장자리에 글리프 놓기

프레임 크기를 조정하여 프레임의 내부에 드롭 글리프가 나타나면 해당 프레임이 정확히 표시되므로 CTFrameDraw 내부에서 문제가 발생했다고 생각됩니다.

또한 부착
CGContextRef context = UIGraphicsGetCurrentContext(); 

// Flip the coordinate system 
CGContextSetTextMatrix(context, CGAffineTransformIdentity); 
CGContextTranslateCTM(context, 0, v.textFrame.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 

CGMutablePathRef path = CGPathCreateMutable(); //1 
CGPathAddRect(path, NULL, v.textFrame); 

CGFloat minLineHeight = 60.0; 
CGFloat maxLineHeight = 60.0; 

CTTextAlignment paragraphAlignment = kCTRightTextAlignment; 
CTLineBreakMode lineBrkMode = kCTLineBreakByWordWrapping; 

CTParagraphStyleSetting setting[4] = { 
{kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &paragraphAlignment}, 
{kCTParagraphStyleSpecifierMinimumLineHeight, sizeof(CGFloat), &minLineHeight}, 
{kCTParagraphStyleSpecifierMaximumLineHeight, sizeof(CGFloat), &maxLineHeight}, 
{kCTParagraphStyleSpecifierLineBreakMode, sizeof(CTLineBreakMode), &lineBrkMode} 
}; 


CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(setting, 4); 
NSDictionary *attr  = [NSDictionary dictionaryWithObjectsAndKeys: 
(id)v.arabicFont, (id)kCTFontAttributeName, 
paragraphStyle, (id)kCTParagraphStyleAttributeName, 
nil]; 

CFRelease(paragraphStyle); 

NSAttributedString* attString = [[[NSAttributedString alloc] 
initWithString:v.verseText attributes:attr] autorelease]; //2 

CTFramesetterRef framesetter = 
CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString); //3 
CTFrameRef frame = 
CTFramesetterCreateFrame(framesetter, 
CFRangeMake(0, [attString length]), path, NULL); 

CTFrameDraw(frame, context); //4 

CFRelease(frame); //5 
CFRelease(path); 
CFRelease(framesetter); 

내가 직면하고있는 문제를 보여주는 스크린 샷입니다 : 아래는 내가 아랍어 텍스트를 렌더링하는 데 사용하고 코드입니다. 어떤 도움이라도 대단히 감사 할 것입니다. 감사.

무효 : http://stellarbeacon.com.au/invalid.png 유효한 : 올바른 프레임 크기를 결정하는 관련 CoreText에서 몇 가지 버그가 있습니다 http://stellarbeacon.com.au/valid.png

+0

다른 글꼴에도 동일한 문제가 있습니다. 당신이 이미 대답을 찾았다면 여기를보십시오 : http://stackoverflow.com/questions/13755757/ctframedraw-cut-some-fonts – Coolant

+0

@Coolant : 고맙게도 어제 나는 약간 다른 글꼴로 문제가 사라질 것이라고 생각했습니다. , 나는 당신의 경우에 적용 할 지 모르겠다. 아래의 의견을 읽으십시오. –

답변

2

. 이 중 일부는 iOS 6에 고정되어 있습니다 (예 : http://www.cocoanetics.com/2012/02/radar-coretext-line-spacing-bug/

문제가 계속 발생하면 구체적인 내용의 레이더 파일을 제출해야합니다. 또한 Apple DTS로 전화를 걸어 해결 방법을 제공해야합니다. 종종 문제가 실제로 버그 인 경우 DTS 통화를 돌려 받게됩니다.

추신 : 수동 레이아웃 및 표시를 수행하는 DTCoreText보기로 텍스트를 표시하고 문제가 거기에서 재현 될 수 있는지 확인하십시오. 그렇지 않다면 해결 방법이 있습니다.

+0

답장을 보내 주셔서 감사합니다. 지난 몇 주 동안 나는 많은 것들을 시도했지만, 나는 거의 잃어버린 길을 걷어 냈습니다. 그러나 문제가 여전히 지속되면서 수동으로 레이아웃을 시도했습니다. 그러나 운 좋게 어제 나는 문제가 없어지는 약간 다른 글꼴로 생각했는데, 이는 게시물을 읽은 후 완벽하게 이해합니다. :) –

+0

그래, iOS6에서 테스트했는데 문제가 여전히 있습니다. – Coolant

+0

iOS 6 픽스를 확인한 Apple 엔지니어는 일부 글꼴의 경우 포함 된 메트릭이 누락되거나 잘못되었음을 언급했습니다. 따라서 다른 글꼴을 사용하는 것도 해결책이 될 수 있습니다. 그러나 확실히 레이더를 신고하면 미래에이 문제를 수정할 수 있습니다. – Cocoanetics