ios - CTRun 在 CoreText iOS 上从右到左

标签 ios core-text

我想用 CGContextShowGlyphsAtPositions 绘制字形,但是当我使用 CTRunGetPositions 时,字形的位置从左边开始。 CTRunGetStatus 返回 kCTRunStatusRightToLeft 但结果是从左到右。如何从右向左绘制文本?

对于从左到右的英语字符是可以的,因为这种语言是从左到右的,但我使用阿拉伯字符,而阿拉伯语是从右到左的语言。

最佳答案

位置是从左到右,因为字形通常是从左到右绘制的,因为这是“x”增加的方向。当你绘制一个CGGlyph时,语言不会'不再重要了。绘制كتب时,系统会先绘制,所以它的位置在数组中排在第一位。

CTRunGetGlyphs 的结果与 CTRunGetPositions 的顺序相同。 kCTRunStatusRightToLeft 所做的只是告诉您字形顺序与字符串索引顺序严格相反。

使用 CGContextShowGlyphsAtPositions 从右到左绘制阿拉伯语没有任何问题。您遇到了什么问题?

CFIndex glyphCount = CTRunGetGlyphCount(run);
CGPoint *positions = calloc(glyphCount, sizeof(CGPoint));
CTRunGetPositions(run, CFRangeMake(0, 0), positions);
CGGlyph *glyphs = calloc(glyphCount, sizeof(CGGlyph));
CTRunGetGlyphs(run, CFRangeMake(0, 0), glyphs);
CGContextShowGlyphsAtPositions(context, glyphs, positions, glyphCount);
free(positions);
free(glyphs);

关于ios - CTRun 在 CoreText iOS 上从右到左,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11767606/

相关文章:

ios - 如何在 WKWebView Swift4 中加载 excel/pdf 服务器 url

ios - 如何在SwiftUI中使用Core Text

c - 如何使用 CTFontCreateWithGraphicsFont 避免内存泄漏?

ios - CTFrame 的第一行不考虑 kCTParagraphStyleSpecifierParagraphSpacing

ios - 核心数据实体重命名

ios - iOS 10.3.2 中未安装 MDM 配置文件

iphone - 使用特定日期将文本保存在 plist 文件中

ios - 如何根据SceneKit中的一些变量控制3D对象的位置(或旋转)?

objective-c - 为什么使用 CoreText 绘图看起来与使用 UILabel 不同?

iphone - 内存使用随着 CTFontCreateWithName 和 CTFramesetterRef 的增加而增长