沿着路径绘制文本提出了另一种常见的排版难题。图8-29显示了绘制到星形路径上的字符串。为了突出显示输入是属性字符串的事实,在执行任何绘图之前,我随机着色了每个字母。
图8-29沿路径排版。
清单8-3计算属性字符串中每个字符的渲染大小,确定边界高度和宽度。获得允许绘图功能确定每个字符(或Core Text术语“glyph”)的路径消耗多少尺寸:
1 | CGRect bounding = [item boundingRectWithSize:CGSizeMake( |
如果沿着一条线布置,该边界矩形将确定字形的中心的位置。清单8-3使用该距离计算路径长度的百分比,第5章的路径插补(interpolation)返回位置和坡度。正如您在第1章中所看到的,您可以平移和旋转上下文来定位和精确地摆放您的文本。这允许使用NSAttributedString
的drawAtPoint:
方法来渲染字符串。
消耗(摆放满)整个路径后,例程停止。这会剪切任何剩余的字符; 他们根本就没有被画(在上面)。如果要确保整个字符串出现,您需要调整字体选择以匹配路径长度。
清单8-3沿着贝塞尔路径放置文本
1 | @implementation UIBezierPath (TextUtilities) |
本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。