新浦京81707con > 注册购买 > CoreText基础概念,基本用法

原标题:CoreText基础概念,基本用法

浏览次数:170 时间:2020-03-21

目前阅读ibireme神的源码,见到了 CoreText 排版这一块,里面含有了许多文字制版的专有名词,这里做一下整理,顺便帮大家安利一下。

IOS CoreText.framework --- 基本用法

 

CoreText 框架中最常用的多少个类:

 

  1. CTFont
  2. CTFontCollection
  3. CTFontDescriptor
  4. CTFrame
  5. CTFramesetter
  6. CTGlyphInfo
  7. CTLine
  8. CTParagraphStyle
  9. CTRun
  10. CTTextTab
  11. CTTypesetter

     

    先来询问一下该框架的完整视窗组合图:

    图片 1

    CTFrame 作为叁个平安无事的画布(Canvas卡塔尔,个中由行(CTLine卡塔尔(قطر‎组成,而每行可以分成一个或几个小方块(CTRun)。

    专心:你无需团结创设CTRun,Core Text将基于NSAttributedString的性子来机关成立CTRun。每一种CTRun对象对应差异的品质,正就此,你能够自由的支配字体、颜色、字间隔等等音讯。

    常备管理步聚:

    1.行使core text正是先有二个要浮现的string,然后定义这几个string各个部分的体制->attributedString -> 生成 CTFramesetter -> 获得CTFrame -> 绘制(CTFrameDraw)
    在那之中能够更详尽的装置换市场价格势,对齐方式,绘制区域的轻重等。
    2.制图只是彰显,点击事件就供给三个确定了。
    CTFrame 包罗了多少个CTLine,并且能够得到各类line的实际上地点与大小。剖断点击处在不在有个别line上。CTLine 又有啥不可确定这么些点(相对于ctline的坐标卡塔尔(قطر‎处的文字范围。然后遍历这一个string的有所NSTextCheckingResult,依据result的rang决断点击处在不在这里个rang上,进而得到点击的链接与岗位。

     

    字体的基本知识:

     

    字体(Font卡塔尔(قطر‎:是一多种字号、样式和磅值相同的字符(比如:10磅金鼎文Palatino卡塔尔。现多被视为字样的同义词

    字面(Face卡塔尔:是具有字号的磅值和格式的汇总

    字体集(Font family卡塔尔(قطر‎:是一组有关字体(举例:Franklin family包涵富兰克林Gothic、Fran-klinHeavy和Franklin CompressedState of Qatar

    磅值(WeightState of Qatar:用于描述字体粗度。标准的磅值,从最粗到最细,有非常细、细、book、中等、半粗、粗、异常粗、一点也不细

    体制(Style卡塔尔国:字形有三种样式:罗曼 type是直体;oblique type是斜体;utakuc type是斜体兼曲线(比罗曼 type更像书法体卡塔尔国。

    x中度(X heightState of Qatar:指小写字母的平分中度(以x为基准卡塔尔国。磅值雷同的两字母,x中度越大的假名看起来比x中度小的假名要大

    Cap中度(Cap height卡塔尔:与x高度相符。指大写字母的平均中度(以C为条件卡塔尔

    下行字母(Descender卡塔尔(قطر‎:举例在字母q中,基线以下的假名部分叫下伸部分

    上行字母(Ascender卡塔尔(قطر‎:x高度以上的有个别(比方字母bState of Qatar叫做上伸部分

    基线(Baseline卡塔尔国:平时在x、v、b、m下的那条线

    描边(Stroke卡塔尔(قطر‎:组成字符的线或曲线。能够加粗或改变字符形状

    衬线(Serif卡塔尔(قطر‎:用来使字符更可视的一条水平线。如字母左上角和上边包车型大巴水平线。

    无衬线(Sans SerifState of Qatar:能够让排字员不使用衬线装饰。

    方形字(Block卡塔尔国:这种字体的笔画使字符看起来比无衬线字更猛烈,但还不到周围的衬线字的水平。比方Lubalin Graph就是方形字,这种字看起来好疑似木头块刻的同等

    手写体脚本(Calligraphic script卡塔尔(قطر‎:是一种模拟手写体的书体。比如MurrayHill也许Fraktur字体

    方法字(DecorativeState of Qatar:像雕塑般的字体

    Pi符号(Pisymbol卡塔尔国:非规范的字母数字字符的特殊符号。比方Wingdings和Mathematical Pi

    连写(Ligature卡塔尔:是一三种连写字母如fi、fl、ffi或ffl。由于字些字母形状的来由平常被连写,故排字员已习于旧贯将它们连写。

    图片 2

    图片 3

     

    字符属性名称:

     

    const CFStringRef kCTCharacterShapeAttributeName;              
    
    //字体形状属性  必须是CFNumberRef对象默认为0,非0则对应相应的字符形状定义,如1表示传统字符形状
    
    const CFStringRef kCTFontAttributeName;  
    
    //字体属性   必须是CTFont对象
    const CFStringRef kCTKernAttributeName;                        
    
    //字符间隔属性 必须是CFNumberRef对象
    const CFStringRef kCTLigatureAttributeName;                 
    
    //设置是否使用连字属性,设置为0,表示不使用连字属性。标准的英文连字有FI,FL.默认值为1,既是使用标准连字。也就是当搜索到f时候,会把fl当成一个文字。必须是CFNumberRef 默认为1,可取0,1,2
    const CFStringRef kCTForegroundColorAttributeName;             
    
    //字体颜色属性  必须是CGColor对象,默认为black
    const CFStringRef kCTForegroundColorFromContextAttributeName; 
    
     //上下文的字体颜色属性 必须为CFBooleanRef 默认为False,
    const CFStringRef kCTParagraphStyleAttributeName;              
    
    //段落样式属性 必须是CTParagraphStyle对象 默认为NIL
    const CFStringRef kCTStrokeWidthAttributeName;              
    
    //笔画线条宽度 必须是CFNumberRef对象,默为0.0f,标准为3.0f
    const CFStringRef kCTStrokeColorAttributeName;              
    
    //笔画的颜色属性 必须是CGColorRef 对象,默认为前景色
    const CFStringRef kCTSuperscriptAttributeName;              
    
    //设置字体的上下标属性 必须是CFNumberRef对象 默认为0,可为-1为下标,1为上标,需要字体支持才行。如排列组合的样式Cn1
    const CFStringRef kCTUnderlineColorAttributeName;           
    
    //字体下划线颜色属性 必须是CGColorRef对象,默认为前景色
    const CFStringRef kCTUnderlineStyleAttributeName;           
    
    //字体下划线样式属性 必须是CFNumberRef对象,默为kCTUnderlineStyleNone 可以通过CTUnderlineStypleModifiers 进行修改下划线风格
    const CFStringRef kCTVerticalFormsAttributeName;
    
    //文字的字形方向属性 必须是CFBooleanRef 默认为false,false表示水平方向,true表示竖直方向
    const CFStringRef kCTGlyphInfoAttributeName;
    
    //字体信息属性 必须是CTGlyphInfo对象
    const CFStringRef kCTRunDelegateAttributeName
    
    //CTRun 委托属性 必须是CTRunDelegate对象
    

    譬喻表明:

     

     

    [cpp] view plaincopy

    1. NSMutableAttributedString *mabstring = [[NSMutableAttributedString alloc]initWithString:@This is a test of characterAttribute. 华语字符]; 图片 4
     

     

    **[cpp]** view plaincopy

    1.  //设置字体属性
    2.  CTFontRef font = CTFontCreateWithName(CFSTR(Georgia), 40,
        NULL);
    3.  [mabstring addAttribute:(id)kCTFontAttributeName
        value:(id)font range:NSMakeRange(0, 4)];
        ![](http://www.bkjia.com/uploads/allimg/150603/0421412A8-4.jpg)  
        **[cpp]** view plaincopy
        1.  //设置斜体字
        2.  CTFontRef font =
            CTFontCreateWithName((CFStringRef)[UIFont
            italicSystemFontOfSize:20].fontName, 14, NULL);
        3.  [mabstring addAttribute:(id)kCTFontAttributeName
            value:(id)font range:NSMakeRange(0, 4)];
            ![](http://www.bkjia.com/uploads/allimg/150603/0421412b3-5.jpg)  
            **[cpp]** view plaincopy
            1.  //下划线
            2.  [mabstring
                addAttribute:(id)kCTUnderlineStyleAttributeName
                value:(id)[NSNumber
                numberWithInt:kCTUnderlineStyleDouble]
                range:NSMakeRange(0, 4)];
                ![](http://www.bkjia.com/uploads/allimg/150603/0421413417-6.jpg)  
                **[cpp]** view plaincopy
                1.  //下划线颜色
                2.  [mabstring
                    addAttribute:(id)kCTUnderlineColorAttributeName
                    value:(id)[UIColor redColor].CGColor
                    range:NSMakeRange(0, 4)];
                    ![](http://www.bkjia.com/uploads/allimg/150603/0421411555-7.jpg)  

                    **[cpp]** view plaincopy
                    1.  //设置字体简隔 eg:test
                    2.  long number = 10;
                    3.  CFNumberRef num =
                        CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
                    4.  [mabstring
                        addAttribute:(id)kCTKernAttributeName
                        value:(id)num range:NSMakeRange(10, 4)];
                        ![](http://www.bkjia.com/uploads/allimg/150603/0421413959-8.jpg)  
                        **[cpp]** view plaincopy
                        1.  //设置连字
                        2.  long number = 1;
                        3.  CFNumberRef num =
                            CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
                        4.  [mabstring
                            addAttribute:(id)kCTLigatureAttributeName
                            value:(id)num range:NSMakeRange(0, [str
                            length])];
                            连字还不会使用,未看到效果。  
                            **[cpp]** view plaincopy
                            1.  //设置字体颜色
                            2.  [mabstring
                                addAttribute:(id)kCTForegroundColorAttributeName
                                value:(id)[UIColor
                                redColor].CGColor
                                range:NSMakeRange(0, 9)];
                                ![](http://www.bkjia.com/uploads/allimg/150603/042141D57-9.jpg)  
                                **[cpp]** view plaincopy
                                1.  //设置字体颜色为前影色
                                2.  CFBooleanRef flag =
                                    kCFBooleanTrue;
                                3.  [mabstring
                                    addAttribute:(id)kCTForegroundColorFromContextAttributeName
                                    value:(id)flag
                                    range:NSMakeRange(5, 10)];
                                    无明显效果。

                                     

                                     

                                    **[cpp]** view plaincopy

                                    1.  //设置空心字
                                    2.  long number = 2;
                                    3.  CFNumberRef num =
                                        CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
                                    4.  [mabstring
                                        addAttribute:(id)kCTStrokeWidthAttributeName
                                        value:(id)num
                                        range:NSMakeRange(0, [str
                                        length])];
                                        ![](http://www.bkjia.com/uploads/allimg/150603/042141B55-10.jpg)  
                                        **[cpp]** view plaincopy
                                        1.  //设置空心字
                                        2.  long number = 2;
                                        3.  CFNumberRef num =
                                            CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
                                        4.  [mabstring
                                            addAttribute:(id)kCTStrokeWidthAttributeName
                                            value:(id)num
                                            range:NSMakeRange(0,
                                            [str length])];
                                        5.   
                                        6.  //设置空心字颜色
                                        7.  [mabstring
                                            addAttribute:(id)kCTStrokeColorAttributeName
                                            value:(id)[UIColor
                                            greenColor].CGColor
                                            range:NSMakeRange(0,
                                            [str length])];
                                            ![](http://www.bkjia.com/uploads/allimg/150603/042141A41-11.jpg)  
                                            在设置空心字颜色时,必须先将字体高为空心,否则设置颜色是没有效果的。  


                                             

                                            **[cpp]** view
                                            plaincopy

                                            1.  //对同一段字体进行多属性设置
                                            2.  //红色
                                            3.  NSMutableDictionary
                                                *attributes =
                                                [NSMutableDictionary
                                                dictionaryWithObject:(id)[UIColor
                                                redColor].CGColor
                                                forKey:(id)kCTForegroundColorAttributeName];
                                            4.  //斜体
                                            5.  CTFontRef font =
                                                CTFontCreateWithName((CFStringRef)[UIFont
                                                italicSystemFontOfSize:20].fontName,
                                                40, NULL);
                                            6.  [attributes
                                                setObject:(id)font
                                                forKey:(id)kCTFontAttributeName];
                                            7.  //下划线
                                            8.  [attributes
                                                setObject:(id)[NSNumber
                                                numberWithInt:kCTUnderlineStyleDouble]
                                                forKey:(id)kCTUnderlineStyleAttributeName];
                                            9.   
                                            10. [mabstring
                                                addAttributes:attributes
                                                range:NSMakeRange(0,
                                                4)];
                                                ![](http://www.bkjia.com/uploads/allimg/150603/0421412I7-12.jpg)  

                                                 

                                                最后是draw了。

                                                 

                                                **[cpp]** view
                                                plaincopy

                                                1.  -(void)characterAttribute
                                                2.  {
                                                3.  NSString *str =
                                                    @This is a test
                                                    of
                                                    characterAttribute.
                                                    中文字符;
                                                4.  NSMutableAttributedString
                                                    *mabstring =
                                                    [[NSMutableAttributedString
                                                    alloc]initWithString:str];
                                                5.   
                                                6.  [mabstring
                                                    beginEditing];
                                                7.  /*
                                                8.  long number = 1;
                                                9.  CFNumberRef num
                                                    =
                                                    CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
                                                10. [mabstring
                                                    addAttribute:(id)kCTCharacterShapeAttributeName
                                                    value:(id)num
                                                    range:NSMakeRange(0,
                                                    4)];
                                                11. */
                                                12. /*
                                                13. //设置字体属性
                                                14. CTFontRef font =
                                                    CTFontCreateWithName(CFSTR(Georgia),
                                                    40, NULL);
                                                15. [mabstring
                                                    addAttribute:(id)kCTFontAttributeName
                                                    value:(id)font
                                                    range:NSMakeRange(0,
                                                    4)];
                                                16. */
                                                17. /*
                                                18. //设置字体简隔
                                                    eg:test
                                                19. long number =
                                                    10;
                                                20. CFNumberRef num
                                                    =
                                                    CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
                                                21. [mabstring
                                                    addAttribute:(id)kCTKernAttributeName
                                                    value:(id)num
                                                    range:NSMakeRange(10,
                                                    4)];
                                                22. */
                                                23.  
                                                24. /*
                                                25. long number = 1;
                                                26. CFNumberRef num
                                                    =
                                                    CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
                                                27. [mabstring
                                                    addAttribute:(id)kCTLigatureAttributeName
                                                    value:(id)num
                                                    range:NSMakeRange(0,
                                                    [str
                                                    length])];
                                                28. */
                                                29. /*
                                                30. //设置字体颜色
                                                31. [mabstring
                                                    addAttribute:(id)kCTForegroundColorAttributeName
                                                    value:(id)[UIColor
                                                    redColor].CGColor
                                                    range:NSMakeRange(0,
                                                    9)];
                                                32. */
                                                33. /*
                                                34. //设置字体颜色为前影色
                                                35. CFBooleanRef
                                                    flag =
                                                    kCFBooleanTrue;
                                                36. [mabstring
                                                    addAttribute:(id)kCTForegroundColorFromContextAttributeName
                                                    value:(id)flag
                                                    range:NSMakeRange(5,
                                                    10)];
                                                37. */
                                                38.  
                                                39. /*
                                                40. //设置空心字
                                                41. long number = 2;
                                                42. CFNumberRef num
                                                    =
                                                    CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
                                                43. [mabstring
                                                    addAttribute:(id)kCTStrokeWidthAttributeName
                                                    value:(id)num
                                                    range:NSMakeRange(0,
                                                    [str
                                                    length])];
                                                44.  
                                                45. //设置空心字颜色
                                                46. [mabstring
                                                    addAttribute:(id)kCTStrokeColorAttributeName
                                                    value:(id)[UIColor
                                                    greenColor].CGColor
                                                    range:NSMakeRange(0,
                                                    [str
                                                    length])];
                                                47. */
                                                48.  
                                                49. /*
                                                50. long number = 1;
                                                51. CFNumberRef num
                                                    =
                                                    CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
                                                52. [mabstring
                                                    addAttribute:(id)kCTSuperscriptAttributeName
                                                    value:(id)num
                                                    range:NSMakeRange(3,
                                                    1)];
                                                53. */
                                                54.  
                                                55. /*
                                                56. //设置斜体字
                                                57. CTFontRef font =
                                                    CTFontCreateWithName((CFStringRef)[UIFont
                                                    italicSystemFontOfSize:20].fontName,
                                                    14, NULL);
                                                58. [mabstring
                                                    addAttribute:(id)kCTFontAttributeName
                                                    value:(id)font
                                                    range:NSMakeRange(0,
                                                    4)];
                                                59. */
                                                60.  
                                                61. /*
                                                62. //下划线
                                                63. [mabstring
                                                    addAttribute:(id)kCTUnderlineStyleAttributeName
                                                    value:(id)[NSNumber
                                                    numberWithInt:kCTUnderlineStyleDouble]
                                                    range:NSMakeRange(0,
                                                    4)];
                                                64. //下划线颜色
                                                65. [mabstring
                                                    addAttribute:(id)kCTUnderlineColorAttributeName
                                                    value:(id)[UIColor
                                                    redColor].CGColor
                                                    range:NSMakeRange(0,
                                                    4)];
                                                66. */
                                                67.  
                                                68.  
                                                69.  
                                                70. //对同一段字体进行多属性设置
                                                71. //红色
                                                72. NSMutableDictionary
                                                    *attributes =
                                                    [NSMutableDictionary
                                                    dictionaryWithObject:(id)[UIColor
                                                    redColor].CGColor
                                                    forKey:(id)kCTForegroundColorAttributeName];
                                                73. //斜体
                                                74. CTFontRef font =
                                                    CTFontCreateWithName((CFStringRef)[UIFont
                                                    italicSystemFontOfSize:20].fontName,
                                                    40, NULL);
                                                75. [attributes
                                                    setObject:(id)font
                                                    forKey:(id)kCTFontAttributeName];
                                                76. //下划线
                                                77. [attributes
                                                    setObject:(id)[NSNumber
                                                    numberWithInt:kCTUnderlineStyleDouble]
                                                    forKey:(id)kCTUnderlineStyleAttributeName];
                                                78.  
                                                79. [mabstring
                                                    addAttributes:attributes
                                                    range:NSMakeRange(0,
                                                    4)];
                                                80.  
                                                81.  
                                                82.  
                                                83. NSRange kk =
                                                    NSMakeRange(0,
                                                    4);
                                                84.  
                                                85. NSDictionary *
                                                    dc = [mabstring
                                                    attributesAtIndex:0
                                                    effectiveRange:&kk];
                                                86.  
                                                87. [mabstring
                                                    endEditing];
                                                88.  
                                                89. NSLog(@value =
                                                    %@,dc);
                                                90.  
                                                91.  
                                                92.  
                                                93. CTFramesetterRef
                                                    framesetter =
                                                    CTFramesetterCreateWithAttributedString((CFAttributedStringRef)mabstring);
                                                94.  
                                                95. CGMutablePathRef
                                                    Path =
                                                    CGPathCreateMutable();
                                                96.  
                                                97. CGPathAddRect(Path,
                                                    NULL
                                                    ,CGRectMake(10 ,
                                                    0
                                                    ,self.bounds.size.width-10
                                                    ,
                                                    self.bounds.size.height-10));
                                                98.  
                                                99. CTFrameRef frame
                                                    =
                                                    CTFramesetterCreateFrame(framesetter,
                                                    CFRangeMake(0,
                                                    0), Path, NULL);
                                                100.  
                                                101. //获取当前(View)上下文以便于之后的绘画,这个是一个离屏。
                                                102. CGContextRef
                                                    context =
                                                    UIGraphicsGetCurrentContext();
                                                103.  
                                                104. CGContextSetTextMatrix(context
                                                    ,
                                                    CGAffineTransformIdentity);
                                                105.  
                                                106. //压栈,压入图形状态栈中.每个图形上下文维护一个图形状态栈,并不是所有的当前绘画环境的图形状态的元素都被保存。图形状态中不考虑当前路径,所以不保存
                                                107. //保存现在得上下文图形状态。不管后续对context上绘制什么都不会影响真正得屏幕。
                                                108. CGContextSaveGState(context);
                                                109.  
                                                110. //x,y轴方向移动
                                                111. CGContextTranslateCTM(context
                                                    , 0
                                                    ,self.bounds.size.height);
                                                112.  
                                                113. //缩放x,y轴方向缩放,-1.0为反向1.0倍,坐标系转换,沿x轴翻转180度
                                                114. CGContextScaleCTM(context,
                                                    1.0 ,-1.0);
                                                115.  
                                                116. CTFrameDraw(frame,context);
                                                117.  
                                                118. CGPathRelease(Path);
                                                119. CFRelease(framesetter);
                                                120. }  
                                                    **[cpp]** view
                                                    plaincopy
                                                    1.  -
                                                        (void)drawRect:(CGRect)rect
                                                    2.  {
                                                    3.  [self
                                                        characterAttribute];
                                                    4.  }  


                                                        CORETEXT框架图

                                                        ![](http://www.bkjia.com/uploads/allimg/150603/0421413143-13.png)

                                                        另对于Context的了解可以参考:http://www.padovo.com/blog/2013/01/31/study-coretext/

                                                         

CoreText.framework --- 基本用法 CoreText 框架中最常用的多少个类: CTFont CTFontCollection CTFontDescriptor CTFrame CTFramesetter CTGlyphInfo CTLine CTParagraphStyl...

CoreText 框架中最常用的几个类:

  • CTFont
  • CTFontCollection
  • CTFontDescriptor
  • CTFrame
  • CTFramesetter
  • CTGlyphInfo
  • CTLine
  • CTParagraphStyle
  • CTRun
  • CTTextTab
  • CTTypesett

上边是该框架的结构图

本文由新浦京81707con发布于注册购买,转载请注明出处:CoreText基础概念,基本用法

关键词: 新浦京81707con 基础 概念 CoreText

上一篇:iOS中数据保存的方式分析,浅谈iOS本地数据保存

下一篇:没有了