gpt4 book ai didi

objective-c - CTFrame 在边缘丢弃字形

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:14 25 4
gpt4 key购买 nike

我正在尝试使用核心文本在我的 iOS 应用程序中使用自定义 TTF 字体 (scheherazade) 呈现阿拉伯语文本,这在大多数情况下都有效 - 但是 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有效:http://stellarbeacon.com.au/valid.png

最佳答案

CoreText 中存在一些与确定正确的帧大小相关的错误。其中一些已在 iOS 6 中修复,例如http://www.cocoanetics.com/2012/02/radar-coretext-line-spacing-bug/

如果您的问题仍然存在,那么您应该提交一个包含细节的 Radar。您还应该使用 Apple DTS 打开一个调用,这可能会为您提供解决方法。通常 - 如果您的问题确实是一个错误 - 那么您的 DTS 调用就会被记回。

PS:尝试使用我的 DTCoreText View 显示您的文本,这些 View 进行手动布局和显示,看看问题是否可以在那里重现。如果没有,那么您有解决方法。

关于objective-c - CTFrame 在边缘丢弃字形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com