使用NSLayoutManager计算字形运行边界

时间:2017-01-20 16:41:55

标签: ios objective-c uitextview nslayoutmanager

我尝试使用UITextView来实现视觉效果,其中文字具有不同的背景颜色,例如:

Example Text Effect

我尝试构建的方法是基于Apple用于计算线条的代码片段,然后根据此example构建,以计算线条的帧数,例如:

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);
}

然后我拿框架画出矩形。我尝试过的这种和类似的方法有一个共同的问题,即我计算的线条的框架包含尾随的白色空间,我不知道如何修剪它们(并且还保持正确的流量)的文本)。

我担心我可能会过度思考这个问题。有更简单的方法吗?

0 个答案:

没有答案