美文网首页
CATextLayer

CATextLayer

作者: CharlyZheng | 来源:发表于2017-08-28 11:03 被阅读26次

    在界面上添加文本有两种;一种是: 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 {
        [super viewDidLoad];
        CATextLayer *lary = [CATextLayer layer];
        lary.string = @"dasfasa";
        lary.bounds = CGRectMake(0, 0, 320, 20);
        lary.font = (__bridge CFTypeRef _Nullable)(@"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.htmlhttp://www.cnblogs.com/daxiaxiaohao/p/4272722.html

    相关文章

      网友评论

          本文标题:CATextLayer

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