CATextLayer

作者: ALiG | 来源:发表于2016-05-09 17:13 被阅读3277次

    在界面上添加文本有两种;一种是: UILabel;第二种是:CATextLayer;
    最近在改到一个菜单的demo 里面大量的弄到了这个,感觉挺有趣的有自己写demo 的、或者想写demo的可以看看要不要用这个,CATextLayer会比UILabel渲染得快得多,所以会减少demo的占用资源率,方便嵌入项目,减少使用资源。
    在一个图层里面显示文字,完全可以借助图层代理直接将字符串使用Core Graphics写入图层的内容(这就是UILabel的精髓)。如果越过寄宿于图层的视图,直接在图层上操作,那其实相当繁琐。你要为每一个显示文字的图层创建一个能像图层代理一样工作的类,还要逻辑上判断哪个图层需要显示哪个字符串,更别提还要记录不同的字体,颜色等一系列乱七八糟的东西。但是,Core Animation提供了一个CALayer的子类CATextLayer,它以图层的形式包含了UILabel几乎所有的绘制特性,并且额外提供了一些新的特性。
    iOS 6及之前的版本,UILabel其实是通过WebKit来实现绘制的,这样就造成了当有很多文字的时候就会有极大的性能压力。而CATextLayer使用了Core text,并且渲染得非常快

    - (void)viewDidLoad
    {
    CATextLayer *lary = [CATextLayer layer];
    lary.string = @"dasfasa";
    lary.bounds = CGRectMake(0, 0, 320, 20);
    lary.font = @"HiraKakuProN-W3";//字体的名字 不是 UIFont
    lary.fontSize = 12.f;//字体的大小
    或者
    //UIFont *font = [UIFont systemFontOfSize:14]; 
    //    CFStringRef fontCFString = (__bridge CFStringRef)font.fontName;
     //       CGFontRef fontRef = CGFontCreateWithFontName(fontCFString);
     //       textLayer.font = fontRef;
     //       textLayer.fontSize = font.pointSize;
     //       CGFontRelease(fontRef); //与CFRelease的功能相当 当字体的null的时候不会引起程序出错
    
    lary.wrapped = YES;//默认为No.  当Yes时,字符串自动适应layer的bounds大小
    lary.alignmentMode = kCAAlignmentCenter;//字体的对齐方式
    lary.position = CGPointMake(160, 410);//layer在view的位置 适用于跟随摸一个不固定长的的控件后面需要的
    lary.contentsScale = [UIScreen mainScreen].scale;//解决文字模糊 以Retina方式来渲染,防止画出来的文本像素化
    lary.foregroundColor =[UIColor redColor].CGColor;//字体的颜色 文本颜色
    [self.view.layer addSublayer:lary];
    }
    

    推荐两个还不错的 我自己看了个大概 ,想细读的可以看楼下两个链接 看起来超级棒的。
    https://zsisme.gitbooks.io/ios-/content/chapter1/layers-and-trees.html
    http://www.cnblogs.com/daxiaxiaohao/p/4272722.html

    相关文章

      网友评论

        本文标题:CATextLayer

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