В настоящее время я использую следующий код для извлечения логической позиции глифов в 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];