如何在NSTextView中找到字符的像素位置?

3
我目前使用以下代码来获取字形的逻辑NSView位置,这很好地工作了,但似乎有点慢,并且位置不精确地在字符字距和基线上。很可能我只需要逐个迭代字形并自己构建矩形。

这个代码(函数)现在可以运行,只是想看看是否可以更有效或正确地完成。

// lastRange is any valid, bounds checked character range in an NSTextView


NSLayoutManager *layoutManager = [self layoutManager];
NSRect paragraphRect = [layoutManager boundingRectForGlyphRange:lastRange inTextContainer:[self textContainer]];

// Draw a gradient around the range.
NSGradient * gradient = [self indicatorGradient];
CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetBlendMode(myContext , kCGBlendModeMultiply);
[gradient drawInRect:paragraphRect angle:90];
1个回答

3
这是实现它的方式。然而,如果lastRange是一个字符范围,就像你描述的那样,你必须将它经过处理。
lastRange = [layoutManager glyphRangeForCharacterRange:lastRange actualRange:NULL];

首先要获得正确的结果。您还需要确保考虑到文本所处的文本容器的来源,然后进行布局。

NSPoint containerOrigin = [[container textView] textContainerOrigin];
paragraphRect = NSOffsetRect(paragraphRect,containerOrigin.x,containerOrigin.y);

绘制前。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接