CALayer常用子类

  • CAEmitterLayer 发射器层,用来控制粒子效果
  • CAGradientLayer 梯度层,颜色渐变
  • CAEAGLayer 用OpenGL ES绘制的层
  • CAReplicationLayer 用来自动复制sublayer
  • CAScrollLayer 用来管理可滑动的区域
  • CAShapeLayer 绘制立体的贝塞尔曲线
  • CATextLayer 可以绘制AttributeString
  • CATiledLayer 用来管理一副可以被分割的大图
  • CATransformLayer 用来渲染3Dlayer的层次结构

相关 Demo下载地址

CALayer是Core Animation的基础,UIKit 相关内容实现的基础
简单来说,View和Layer最大的区别就是View可以接受用户输入(例如触摸)而Layer不可以,Layer单独并不能呈现出任何可视的内容,必须依托于View。Layer只是几何上呈现给用户的东西,它较为轻量,通常采用Cache技术,对资源消耗也较小。

一、简单介绍

在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView。
其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层

@property(nonatomic,readonly,retain) CALayer *layer; 

当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示
换句话说,UIView本身不具备显示的功能,拥有显示功能的是它内部的图层。

二、简单使用

UIView之所以能够显示,完全是因为内部的CALayer对象。因此,通过操作这个CALayer对象,可以很方便地调整UIView的一些界面属性,比如:阴影、圆角大小、边框宽度和颜色等。

1. CATiledLayer - 用来管理一副可以被分割的大图

  • 有些时候你可能需要绘制一个很大的图片,iOS应用通畅运行在内存受限的设备上,所以读取整个图片到内存中是不明智的。
  • 在主线程调用UIImage的imageNamedimageWithContentsOfFile方法,将会阻塞你的用户界面,至少会引起动画卡顿现象。
功能简介
  • CATiledLayer以图块(tile)为单位异步绘制图层内容,对超大尺寸图片或者只能在视图中显示一小部分的内容效果拔群,因为不用把内容完全载入内存就可以看到内容。
  • 把内容分解成固定大小的tile,当图块在屏幕上显示的时候,它会调用drawRect的方法进行绘制,只有可见的图块才绘制,这样就节约了处理时间和内存。
相关属性

产生模糊的根源是图层的细节层次(level of detail,简称LOD),CATiledLayer有两个相关属性:

  • levelsOfDetail:指图层维护的LOD数目,默认值为1,每进一级会对前一级分辨率的一半进行缓存,图层的levelsOfDetail最大值,也就是最底层细节,对应至少一个像素点。
  • levelsOfDetailBias:指的是该图层缓存的放大LOD数目,默认为0,即不会额外缓存放大层次,每进一级会对前一级两倍分辨率进行缓存。

2. CAShapeLayer - 绘制立体的贝塞尔曲线

demo下载地址:
CAShapeLayer - 绘制机器猫

你可能感兴趣的:(CALayer常用子类)