Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用NSLayoutManager计算glyph运行边界_Ios_Objective C_Uitextview_Nslayoutmanager - Fatal编程技术网

Ios 使用NSLayoutManager计算glyph运行边界

Ios 使用NSLayoutManager计算glyph运行边界,ios,objective-c,uitextview,nslayoutmanager,Ios,Objective C,Uitextview,Nslayoutmanager,我正在尝试使用UITextView实现视觉效果,其中文本具有明显的背景色,例如: 我尝试构建的方法是基于Apple用于计算线条的代码片段,然后构建如图所示的线条框架,例如: NSLayoutManager *layoutManager = [textView layoutManager]; NSString *string = textView.text; NSInteger numberOfLines, index, stringLength = [string length]; NSMu

我正在尝试使用
UITextView
实现视觉效果,其中文本具有明显的背景色,例如:

我尝试构建的方法是基于Apple用于计算线条的代码片段,然后构建如图所示的线条框架,例如:

NSLayoutManager *layoutManager = [textView layoutManager];
NSString *string = textView.text;
NSInteger numberOfLines, index, stringLength = [string length];

NSMutableArray *ranges = [[NSMutableArray alloc] init];
NSMutableArray *frames = [[NSMutableArray alloc] init];
for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++)
{
    NSRange tempRange;
    NSRange range = [string lineRangeForRange:NSMakeRange(index, 0)];
    CGRect rect = [layoutManager lineFragmentRectForGlyphAtIndex:index
                                       effectiveRange:&tempRange];

    [ranges addObject:[NSValue valueWithRange:range]];

    [frames addObject:[NSValue valueWithCGRect:rect]];
    NSMaxRange(tempRange);
}
NSLayoutManager*layoutManager=[textView-layoutManager];
NSString*string=textView.text;
NSInteger numberOfLines,index,stringLength=[字符串长度];
NSMUTABLEARRY*范围=[[NSMUTABLEARRY alloc]init];
NSMUTABLEARRY*帧=[[NSMUTABLEARRY alloc]init];
对于(索引=0,numberOfLines=0;索引
然后我拿着框架画出矩形。我尝试过的这种和类似的方法都有一个共同的问题,即我计算的线条框架包含尾随的空格,我不确定如何修剪它们(以及保持正确的文本流)


我担心我可能想得太多了。有没有更简单的方法?

这里有一个可下载的示例项目,可能会对您有所帮助:它在抽头线周围绘制一个方框,消除结尾的空白(返回字符)。它并不像您正在尝试的那样复杂,但可能会有所帮助。这是原始代码吗<代码>索引
未被触及,并且未使用
NSMaxRange
的返回值。但是,您可以在
tempRange
中获得布局图示符范围。只需查看字符串,如果有空格,请删除它们并重新布局(部分)字符串。(顺便说一句:字形和字符不一定有1对1的关系。)你明白了吗?这里有一个可下载的示例项目,可能会对你有所帮助:它在抽头线周围画了一个方框,消除了结尾的空白(返回字符)。它并不像您正在尝试的那样复杂,但可能会有所帮助。这是原始代码吗<代码>索引未被触及,并且未使用
NSMaxRange
的返回值。但是,您可以在
tempRange
中获得布局图示符范围。只需查看字符串,如果有空格,请删除它们并重新布局(部分)字符串。(顺便说一句:字形和字符不一定有一对一的关系。)你明白了吗?