CGLayer是一种很好的缓存常绘内容的方法。注意,不要与CALayer混淆。CALayer是Core Animation中更加强大、复杂的图层对象,而CGLayer是Core Graphics中优化的图层,通常是通过硬件优化用于在CGContext中绘制的。

CGContext有很多种。最常见的是视图图形上下文,由UIGraphicsCurrentContext方法生成,主要用来在屏幕上绘图。上下文也可以在位图和打印中使用。它们拥有不同的特性,包括最大分辨率、颜色详细信息以及是否可以硬件加速。

简单地说,CGLayer与CGBitmapContext类似。你可以在其中绘制内容,保存它并在以后将其结果绘入CGContext中。不同的地方在于,你可以针对特定类型的图形上下文来优化CGLayer。如果某个CGLayer是用于视图图形上下文的,它便可以直接在GPU上缓存其数据,这样可以大大提高性能。CGBitmapContext做不到这点,因为它不知晓你打算在屏幕上绘制它。

下面的示例演示了如何缓存CGLayer。在这个示例中,它在视图被第一次绘制时缓存到一个静态变量。然后,可以在旋转上下文的同时重复“印上”CGLayer图层。使用了UIGraphicsPushContext,这样就可以使用UIKit在图层上下文中绘制文本,而UIGraphicsPopContext则用来返回到普通上下文。这也可以用CGContextShowTextAtPoint完成,UIKit非常易于绘制某个NSString。输出如图8-14所示。

LayerView.mLayer

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

- (void)drawRect:(CGRect)rect {

static CGLayerRef sTextLayer = NULL;

CGContextRef ctx = UIGraphicsGetCurrentContext();

if (sTextLayer == NULL) {

CGRect textBounds = CGRectMake(0, 0, 200, 100);

sTextLayer = CGLayerCreateWithContext(ctx,

textBounds.size,

NULL);

CGContextRef textCtx = CGLayerGetContext(sTextLayer);

CGContextSetRGBFillColor (textCtx, 1.0, 0.0, 0.0, 1);

UIGraphicsPushContext(textCtx);

UIFont *font = [UIFont systemFontOfSize:13.0];

[@"Pushing The Limits" drawInRect:textBounds

withFont:font];

UIGraphicsPopContext();

}

CGContextTranslateCTM(ctx, self.bounds.size.width
/ 2,

self.bounds.size.height
/ 2);

for (NSUInteger i = 0; i
< 10; ++i) {

CGContextRotateCTM(ctx, 2 * M_PI
/ 10);

CGContextDrawLayerAtPoint(ctx,

CGPointZero,

sTextLayer);

}

}

CGLayer和CALayer区别的更多相关文章

  1. UIView 和 CALayer区别 为啥有UIView还要CALayer?

    今天,被坑了,面试的时候没回答出来,特此记录一下 一.继承结构 1: UIView的继承结构为: UIResponder : NSObject UIResponder是用来响应事件的,也就是UIVie ...

  2. UIView与CALayer 区别

    在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个 ...

  3. UIView和CALayer区别

    (1)首先UIView可以响应用户的触摸事件,Layer不可以. (2)View中frame getter方法,bounds和center,UIView并没有做什么工作:它只是简单的各自调用它底层的C ...

  4. UIView CALayer 的区别

    UIView与CALayer的区别,很详细 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不 ...

  5. 详解CALayer 和 UIView的区别和联系

    详解CALayer 和 UIView的区别和联系   前言 前面发了一篇iOS 面试的文章,在说到 UIView 和 CALayer 的区别和联系的时候,被喵神指出没有切中要点,所以这里就 CALay ...

  6. iOS 杂笔-20(UIView和CALayer的区别与联系)

    iOS 杂笔-20(UIView和CALayer的区别与联系) 每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提 ...

  7. UIView与CALayer的区别,很详细

    研 究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人, ...

  8. POP动画引擎中Layer与CALayer的一点区别

    POP动画引擎是facebook提供的一个开源框架, 可以实现很多的动画效果, 这里就不一一介绍啦, 有兴趣的童鞋请移步: https://github.com/facebook/pop 下面简单的讲 ...

  9. iOS 之 CALayer与UIView的区别

    最大区别:CALayer (图层)不会直接渲染到屏幕上. UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它.它本身完全是由CoreAnimation来实现的. 真正的绘图部分,是由一 ...

随机推荐

  1. 期望dp+高斯消元+bfs——hdu4418

    高斯消元又弄了半天.. 注意只要能建立矩阵,那就必定有解,所以高斯消元里可以直接return 1 #include<bits/stdc++.h> using namespace std; ...

  2. linux中对EINTR错误的处理

    https://www.cnblogs.com/flyfish10000/articles/2576885.html EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函 ...

  3. Entityframwork.extended 配置mysql

    entityframework.extended 这个是个很好的扩展,不过由于默认是配置成MSSQL的,今天在github上面 看到一个解决方案,亲测可用,下面贴代码 1.在DbContext 修改默 ...

  4. POJ-1976-A Mini Locomotive-dp

    A train has a locomotive that pulls the train with its many passenger coaches. If the locomotive bre ...

  5. IDA 远程调试设置

    第一步,先去 IDA   dbgsrv  这个目录下,找到要调试的那个远程计算机对应的可用客户端, 比如,android_server, 把它拷贝到目标计算机中, 比如 adb push .... 然 ...

  6. netty http 服务器

    HttpFileServer package com.zhaowb.netty.ch10_1; import io.netty.bootstrap.ServerBootstrap; import io ...

  7. error in ./src/pages/login.vue?vue&type=style&index=0&lang=less&

    vue-cli3创建less工程,npm run serve 无法运行 bug解决方法: rm -rf node-modules 修改package.json为 "less": & ...

  8. 转载别人的ftp,觉得目录结构不错,学习

    开发简单的FTP:1. 用户登陆2. 上传/下载文件3. 不同用户家目录不同4. 查看当前目录下文件5. 充分使用面向对象知识 REDMAE 1 用户登陆 2 3 1.查看用户目录文件 4 2.上传文 ...

  9. Serverless Kubernetes全面升级2.0架构:支持多命名空间、RBAC、CRD、PV/PVC等功能

    Serverless Kubernetes概述: 阿里云Serverless Kubernetes容器服务最新开放香港.新加坡.悉尼区域,同时全面开放2.0架构,帮助用户更加便捷.轻松地步入“以应用为 ...

  10. Ubuntu 快速安装配置Odoo 12

    Odoo 12预计将于今年10月正式发布,这是一次大版本更新,带来了一些不错的新特性,如 文件管理系统(DMS) 用户表单中新增字段(Internal user, Portal, Public) HR ...