iOS 开发交流

iOS 核心图形之CGFont

2019-03-07  本文已影响0人  Mr__Peng__
前言

UIFont的底层实现,用于绘制文本的一组字符符号和布局信息

数据类型

1.CGFontRef :CGFont 的引用

typedef unsigned short CGFontIndex;

提供指定字形标识符的附加方法。等价于CGGlyph,可以交替使用这两种类型的常量

  1. CGGlyph 等价于CGFontIndex
typedef CGFontIndex CGGlyph;
kCGFontIndexMax // `CGFontIndex`最大值
kCGFontIndexInvalid // 无效的字体索引
kCGGlyphMax // 与kCGFontIndexMax等价

绘制文本时,指定一个字符序列。不过,Core Graphics还允许使用CGGlyph值指定符号。无论哪种情况,Core Graphics都使用Apple Type Services (ATS)框架提供的字体数据呈现文本
为函数CGContextShowGlyphsCGContextShowGlyphsAtPoint提供CGGlyph值。这些函数分别在当前文本位置或指定位置显示符号数组

  1. CGFontPostScriptFormat:PostScript字体子集的可能格式
kCGFontPostScriptFormatType1 // 以`Adobe Type 1`字体格式记录
kCGFontPostScriptFormatType3 // 在`PostScript`语言参考
kCGFontPostScriptFormatType42 // 在`Adobe`技术说明5012 (Type 42字体格式规范)中有说明,
  1. 用于字体变化轴字典的键
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) // 字体的符号空间单元数
上一篇下一篇

猜你喜欢

热点阅读