我想用 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/