我想用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 - CT在CoreText iOS上从右到左运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11767606/

10-09 16:34