前言
UIFont
的底层实现,用于绘制文本的一组字符符号和布局信息
数据类型
1.CGFontRef
:CGFont
的引用
typedef unsigned short CGFontIndex;
提供指定字形标识符的附加方法。等价于CGGlyph,可以交替使用这两种类型的常量
-
CGGlyph
等价于CGFontIndex
typedef CGFontIndex CGGlyph;
kCGFontIndexMax // `CGFontIndex`最大值
kCGFontIndexInvalid // 无效的字体索引
kCGGlyphMax // 与kCGFontIndexMax等价
绘制文本时,指定一个字符序列。不过,Core Graphics
还允许使用CGGlyph
值指定符号。无论哪种情况,Core Graphics
都使用Apple Type Services (ATS)
框架提供的字体数据呈现文本
为函数CGContextShowGlyphs
和CGContextShowGlyphsAtPoint
提供CGGlyph
值。这些函数分别在当前文本位置或指定位置显示符号数组
-
CGFontPostScriptFormat
:PostScript
字体子集的可能格式
kCGFontPostScriptFormatType1 // 以`Adobe Type 1`字体格式记录
kCGFontPostScriptFormatType3 // 在`PostScript`语言参考
kCGFontPostScriptFormatType42 // 在`Adobe`技术说明5012 (Type 42字体格式规范)中有说明,
- 用于字体变化轴字典的键
const CFStringRef kCGFontVariationAxisName // 用于从变异轴字典中获取变异轴名称的键。使用此键获得的值是一个`CFStringRef`,它指定了变化轴的名称
const CFStringRef kCGFontVariationAxisMinValue // 用于从变化轴字典中获取最小变化轴值的键。使用此键获得的值是一个`CFNumberRef`,它指定了变化轴的最小值
const CFStringRef kCGFontVariationAxisMaxValue // 用于从变化轴字典中获取最大变化轴值的键。使用此键获得的值是一个`CFNumberRef`,它指定了变化轴的最大值
const CFStringRef kCGFontVariationAxisDefaultValue // 用于从变异轴字典中获取默认变异轴值的键。使用此键获得的值是一个`CFNumberRef`,它指定变量轴的默认值
Retain & Release
CGFontRef CGFontRetain(CGFontRef font); // Retain等同于CFRetain
CGFontRef CGFontRelease(CGFontRef font); // Release等同于CFRelease
创建CGFont
以下方法创建都需要调用CFRelease
CGFontRef CGFontCreateCopyWithVariations(CGFontRef font, CFDictionaryRef variations); // 复制
// variations 变体规范字典,包含与字体的变体轴名称对应的键。字典中的每个键都是一个变异轴名称。每个键的值是为表示为`CFNumber`对象的特定变化轴指定的值。变量中没有指定变量轴名称,则使用字体的当前值
CGFontRef CGFontCreateWithFontName(CFStringRef name) // 通过字体名字创建
// 注意 在核上下文绘制文本之前,必须通过调用函数`CGContextSetFont`将字体设置为当前图形状态
CGFontRef CGFontCreateWithDataProvider(CGDataProviderRef provider) // 从数据提供程序提供的数据创建字体对象
// 注意 在核心图形上下文中绘制文本之前,必须通过调用函数`CGContextSetFontSize`将字体设置为当前图形状态
PostScript字体
CFStringRef CGFontCopyPostScriptName(CGFontRef font) // 获取字体的`PostScript`名称
bool CGFontCanCreatePostScriptSubset(CGFontRef font, CGFontPostScriptFormat format) // `Core Graphics`是否可以以`PostScript`格式创建字体的子集
CFDataRef CGFontCreatePostScriptSubset(CGFontRef font, CFStringRef subsetName, CGFontPostScriptFormat format, const CGGlyph *glyphs, size_t count, const CGGlyph *encoding) // 以指定的`PostScript`格式创建字体的子集
CFDataRef CGFontCreatePostScriptEncoding(CGFontRef font, const CGGlyph *encoding) // 以指定的`PostScript`格式创建字体的子集
使用字体表
CFArrayRef CGFontCopyTableTags(CGFontRef font) // 返回与字体的字体表对应的标记数组
// 返回数组中的每个条目都是一个4字节的值,表示一个TrueType或OpenType字体表标记。要以适合32位和64位架构的方式获得索引k处的标记,需要使用类似于以下代码 : tag = (uint32_t)(uintptr_t)CFArrayGetValue(table, k);
CFDataRef CGFontCopyTableForTag(CGFontRef font, uint32_t tag) // 返回与提供的标记对应的字体表
获得字体信息
CFTypeID CGFontGetTypeID(void) // 获取TypeId
CFArrayRef CGFontCopyVariationAxes(CGFontRef font) // 返回字体的变体轴字典数组
CFDictionaryRef CGFontCopyVariations(CGFontRef font) // 返回字体的变体规范字典
CFStringRef CGFontCopyFullName(CGFontRef font) // 获取字体全名
int CGFontGetAscent(CGFontRef font) // 返回字体的上升率 ***上升是字体中字形基线以上的最大距离
int CGFontGetDescent(CGFontRef font) // 返回字体的下移 *** 下降是字体中字形基线以下的最大距离
int CGFontGetLeading(CGFontRef font) // 返回字体的前导 *** 字体中连续文本行之间的间距。该值以字形空间单位指定
int CGFontGetCapHeight(CGFontRef font) // 返回字体的帽高 *** 字体中字形的平直大写字母顶部基线以上的距离
int CGFontGetXHeight(CGFontRef font) // 返回字体的x高度 *** 字体中字形的平直、非升序小写字母(如x)顶部基线以上的距离
CGRect CGFontGetFontBBox(CGFontRef font) // 返回字体的边框 *** 字体中所有字形的所有包围框的联合
CGFloat CGFontGetItalicAngle(CGFontRef font) // 返回字体的斜体角度 *** 字体的斜体角,从垂直方向逆时针角度测量
CGFloat CGFontGetStemV(CGFontRef font) // 字体中占主导地位的垂直字形的粗细
bool CGFontGetGlyphBBoxes(CGFontRef font, const CGGlyph *glyphs, size_t count, CGRect *bboxes) // 获取数组中每个字形的边界框
CGGlyph CGFontGetGlyphWithGlyphName(CGFontRef font, CFStringRef name) // 字体对象关联的字形名称的字形
CFStringRef CGFontCopyGlyphNameForGlyph(CGFontRef font, CGGlyph glyph) // 指定字形的字形名称
size_t CGFontGetNumberOfGlyphs(CGFontRef font) // 字形的数目
bool CGFontGetGlyphAdvances(CGFontRef font, const CGGlyph *glyphs, size_t count, int *advances) // 获取所提供数组中每个字形的前进宽度
int CGFontGetUnitsPerEm(CGFontRef font) // 字体的符号空间单元数
网友评论