我需要将文本居中绘制到CGContext中。
我开始尝试使用Cocoa的方法。我创建了一个带有文本的NSCell,并尝试这样绘制它:
NSGraphicsContext* newCtx = [NSGraphicsContext
graphicsContextWithGraphicsPort:bitmapContext flipped:true];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:newCtx];
[pCell setFont:font];
[pCell drawWithFrame:rect inView:nil];
[NSGraphicsContext restoreGraphicsState];
但是CGBitmapContext似乎没有呈现文本内容。可能是因为我必须为inView:参数传递nil。
所以我尝试切换到使用Core Graphics进行文本渲染:
最简单的方法似乎是使用CGContextSelectFont通过后缀名称和点大小选择字体,但是CGContextShowTextAtPoint仅接受非Unicode字符,并且似乎没有明显的方法来将文本适合矩形或计算文本行的范围以手动布置矩形。
然后,可以创建一个CGFont,并通过CGContextSetFont进行设置。绘制此文本需要使用CGContextShowGlyphsAtPoint,但是再次CGContext似乎缺少计算生成文本的边界矩形或将文本包装到矩形的功能。而且如何将字符串转换为CGGlyphs数组并不明显。
下一个选项是尝试使用CoreText来呈现字符串。但是Core Text类非常复杂,虽然有示例显示如何在指定字体、矩形中显示文本,但没有示例演示如何计算CoreText字符串的边界矩形。
所以:
- 给定CGFont和CGContext,如何计算一些文本的边界矩形,以及如何将文本字符串转换为CGGlyphs数组?
- 给定字符串、CGContext和后缀名称和点大小,我需要创建哪些Core Text对象来计算字符串的边界矩形和/或在CGContext上将字符串包装到矩形中。
- 给定字符串和NSFont-如何将字符串呈现到CGBitmapContext?我已经知道如何获取其范围。