博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CALayer
阅读量:6683 次
发布时间:2019-06-25

本文共 2338 字,大约阅读时间需要 7 分钟。

  hot3.png

CALayer

    在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮,一个文本标签,一个文本输入框,一个图标等等,这些都是UIView.

    UIView之所以能显示在屏幕上,完全是因为它内部的一个图层.

UIView的显示原理

    在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个图层.

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

    当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有的内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示.

    换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能.

CALayer的基本使用

    通过操作CALayer对象,可以很方便的调整UIView的一些外观属性,比如阴影, 圆角大小, 边框宽度和颜色等.还可以给图层添加动画来实现一些比较炫酷的效果.

CALayer的属性

 // 宽度和高度 @property CGRect bounds; // 位置(默认指中点,具体由anchorPoint决定) @property CGPoint position; // 锚点(x,y的范围都是0-1),决定了position的含义 @property CGPoint anchorPoint; // 背景颜色(CGColorRef类型) @property CGColorRef backgroundColor; // 形变属性 @property CATransform3D transform; // 边框颜色(CGColorRef类型) @property CGColorRef borderColor; // 边框宽度 @property CGFloat borderWidth; // 圆角半径@property CGColorRef borderColor; //内容(比如设置为图片CGImageRef) @property(retain) id contents;

关于CALayer

    首先:

    CALayer 是定义在 QuartzCore 框架中的;

    CGImageRef, CGColorRe f两种数据类型是定义在在 CoreGraphics 框架中的;

    UIColor, UIImage 是定义在 UIKit 框架中.

    其次:

    QuartzCore 和 CoreGraphics 框架是可以跨平台使用的,在iOS和Mac OS X上都能使用 ;

    UIKit只能使用在iOS中.

    为了保证可移植性,QuartzCore不能使用UIImage, UIColor,只能使用CGImageRef, CGColorRef.

UIView和CALayer的选择

    通过CALayer, 就能做出跟UIImageView一样的界面效果. 既然CALayer和UIView都能实现相同的显示效果,那究竟该选择谁好呢?

    对比CALayer, UIView多了一个事件处理功能. 也就是说,CALayer不能处理用户的触摸事件,而UIView可以.

    所以,如果显示出来的东西需要跟用户进行交互的话, 用UIView; 如果不需要跟用户进行交互, 用UIView或者CALayer都可以;当然,CALayer的性能更高一些, 因为它少了事件处理功能, 更加轻量级.

position和anchorPoint

    CALayer有两个非常重要的属性:position和anchorPoint .

@property CGPoint position;

    用来设置CALayer在父层中的位置,以父层的左上角为原点(0,0).

@property CGPoint anchorPoint;

    anchorPoint称为:"定位点" 或 "锚点";

    决定了CALayer身上的哪个点会在position属性所指的位置,以自己的左上角为原点(0,0);

    anchorPoint的 x ,y 的取值范围都是 0 ~ 1, 默认值为(0.5 ,0.5).

隐式动画

    每一个UIView内部都默认关联一个CALayer, 我们可以称这个layer为Root Layer(根层).

    所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动画.

什么是隐式动画 ?

    当对非Root Layer的部分属性进行修改时, 默认会自动产生一些动画效果.而这些属性称为Animatable Properties(可动画属性).

列举几个常见的Animatable Properties(可动画属性);

    bounds : 用于设置CALayer的宽度和高度 ; 修改这个值, 会产生缩放动画 .

    backgroundColor : 用于设置CALayer的背景色 ;修改这个属性会产生背景色的渐变动画 .

    position : 用于设置CALayer的位置 ;修改这个属性会产生平移动画 .

可以通过动画事务(CATransaction)关闭默认的隐式动画效果;

[CATransaction begin];[CATransaction setDisableActions:YES];self.myview.layer.position = CGPointMake(10, 10);[CATransaction commit];

转载于:https://my.oschina.net/aofe/blog/270976

你可能感兴趣的文章
trickle 限制用户空间带宽
查看>>
SQL事务
查看>>
GRE配置案例实现远程网络通信
查看>>
不用linux作为桌面的N个理由
查看>>
Rabbitmq学习之路3-cluster
查看>>
iptables实现NAT(网络搜索整理)
查看>>
关于ip地址
查看>>
ASP.NET自定义404和500错误页面
查看>>
OpenGL学习(七)纹理映射
查看>>
一些必不可少的Sublime Text 2插件
查看>>
测试项目
查看>>
第一章ASP.NET SignalR简介
查看>>
SSH
查看>>
41-50(UIApplication和delegate,UIApplicationMain,UIWindow,程序启动的完整过程,控制器view的延迟加载)...
查看>>
HTTP服务器实现
查看>>
2017.03
查看>>
未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项
查看>>
思科模拟器Packet Tracer的使用
查看>>
资产-服务器变更流程图
查看>>
linux文件特殊权限及文件的访问控制列表
查看>>