美文网首页iOS 开发交流
iOS 核心图形之CGFont

iOS 核心图形之CGFont

作者: Mr__Peng__ | 来源:发表于2019-03-07 16:16 被阅读0次
    前言

    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) // 字体的符号空间单元数
    

    相关文章

      网友评论

        本文标题:iOS 核心图形之CGFont

        本文链接:https://www.haomeiwen.com/subject/xqkmdqtx.html