【发布时间】:2011-05-22 03:28:00
【问题描述】:
我需要将居中的文本绘制到 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 使用它的 postscript 名称和点大小来选择字体,但是 CGContextShowTextAtPoint 只接受非 unicode 字符,并且没有明显的方法可以将文本适应矩形:或计算一行文本的范围以手动布置矩形。
然后,有一个可以创建的CGFont,并设置cia CGContextSetFont。绘制此文本需要 CGContextShowGlyphsAtPoint,但 CGContext 似乎又缺少计算生成文本的边界矩形或将文本包装到矩形的函数。另外,如何将字符串转换为 CGGlyphs 数组并不明显。
下一个选项是尝试使用 CoreText 来呈现字符串。但是 Core Text 类非常复杂,虽然有示例展示了如何以指定的字体、矩形显示文本,但没有示例展示如何计算 CoreText 字符串的边界矩形。
所以:
- 给定一个 CGFont 一个 CGContext 如何计算某些文本的边界矩形,以及如何将文本字符串转换为 CGGlyphs 数组?
- 给定一个字符串、一个 CGContext 和一个 postscript 名称和磅值,我需要创建哪些 Core Text 对象来计算字符串的边界矩形,和/或绘制包装到 CGContext 上的矩形的字符串。
- 给定一个字符串和一个 NSFont - 如何将字符串渲染到 CGBitmapContext 上?我已经知道如何获取它的范围。
【问题讨论】:
-
你能画一个期望结果的例子吗?
-
也许,但是想要的结果很简单——我想在一个矩形中绘制一个带有字体(面和点大小)的字符串。字符串必须被换行,并且我必须能够选择行是左对齐、居中还是右对齐,并且段落是顶部对齐、居中还是底部对齐。
标签: cocoa core-graphics core-text