Using NSLayoutManager to calculate frames for each glyph

℡╲_俬逩灬. 提交于 2019-12-12 07:44:49

问题


On this thread, Core Text calculate letter frame in iOS, they were able to calculate the frame of each glyph very precisely using Core Text. The final rects hug the actual drawn glyphs perfectly.

Using NSLayoutManager's boundingRectForGlyphRange:inTextContainer: doesn't seem to return the glyph bounding boxes that precisely:

And the returned rects don't fully enclose more complex fonts (Zapfino example):

Does anyone know how to replicate the results from the above mentioned discussion without going into Core Text under iOS 7 only apps?

Thanks.


回答1:


I've found a solution for this issue or at least sort of

Problem: boundingRectForGlyphRange results is off in case of RTL text.

So in case of RTL text is detected only:

Using NSLayoutManager method locationForGlyphAtIndex, for each letter in the range. These are the starting points of each glyph in the range. Using these points I adjust the boundingRect correctly.

Here is an outline of it:

CGPoint endPoint = ((NSValue *)pointsOfGlyps.firstObject).CGPointValue;
CGPoint startPoint = ((NSValue *)pointsOfGlyps.lastObject).CGPointValue;
boundingRect.origin.x =  startPoint.x;
boundingRect.size.width = endPoint.x - startPoint.x + letterWidth;

letterWidth is an approximation of a letter width calculated as the delta between two consecutive starting points.



来源:https://stackoverflow.com/questions/21764316/using-nslayoutmanager-to-calculate-frames-for-each-glyph

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!