我正在开发一个应用程序,我在其中使用Core Text进行布局。我用CTFrameSetter来绘制文本。我在文本中插入了一个空白字符'\ ufffc'。现在我想要的是确定这个空白字符的位置,即它的x,y坐标。我找不到任何确定任何特定角色位置的功能。
我尝试使用CTLineGetOffsetForStringIndex( CTLineRef line, CFIndex charIndex, CGFloat* secondaryOffset );
查找位置,但我无法完全理解此方法的工作原理。
有人能就此问题向我提供一些指示吗?
答案 0 :(得分:0)
你可以循环当前CTFrameRef的所有CTLine,并且对于每个ctline,获取CTRun并检查CTRun是否属于你。简单的代码
NSArray *lines = (NSArray*)CTFrameGetLines(workFrame);
NSInteger count = [lines count];
CGPoint *origins = (CGPoint*)malloc(count * sizeof(CGPoint));
CTFrameGetLineOrigins(workFrame, CFRangeMake(0, count), origins);
for (int i = 0; i < lines.count; i++) {
CTLineRef line = (CTLineRef)[lines objectAtIndex:i];
CFRange cfRange = CTLineGetStringRange(line);//the string-range
NSArray * runArray = (NSArray *)CTLineGetGlyphRuns(line);
int runIndex = 0;
for (id runObj in runArray) {
CTRunRef run = (CTRunRef)runObj;
CFRange runRange = CTRunGetStringRange(run);
CGFloat xOffset = CTLineGetOffsetForStringIndex(line, runRange.location + runRange.length, NULL);
//checks if the crrun's text is your space
}
}