l1>CALayer中的“可动画属性”.
a)凡是文档中有“animatable”字样的属性都是“可动画属性”.
b)可动画属性就是说:只要设置了属性(改变了属性),会自动使用动画的方式来执行.
CALayer主要用来展示动画的, layer不具备交互功能.
Layer中有一个addAnimation:forKey:来为layer添加属性动画.
label.layer addAnimation:<#(nonnullCAAnimation*)#>forKey:<#(nullableNSString*)#>
l2>通过CALayer的transform属性可以实现“旋转” “平移” “缩放”效果.
structCATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
structCGAffineTransform{
CGFloat a, b, c, d;
CGFloat tx, ty;
};
设置背景图片的三种方式:
l1>设置layer的contents属性
l2>调用自定义view的drawRect:方法进行绘制
l3>设置view的backgroundColor,调用colorWithPatternImage来进行设置.
CALayer的总结
l1>CA -> Core Animation (核心动画)相对更底层. CALayer负责视图中显示内容和动画.所有动画都是作用在CALayer上的. UIView负责监听和相应事件.UIView是更高层的封装
l2>在iOS中,你能看得见,摸得着的东西基本上都是UIView.比如一个按钮,一个文本标签,一个文本输入框,一个图标等.这些都是UIView,其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时, UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性即可访问这个图层.当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView得显示.换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能.
l3>首先: CALayer是定义在QuartzCore框架中. CGImageRef, CGColorRef两种数据类型是定义在CoreGraphics框架中的. UIColor, UIImage是定义在UIKit框架中的.其次: QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用(C语言编写)但是UIKit只能在iOS中使用(OC编写).因此:为了保证可移植性,QuartzCore不能使用UIImage,UIColor,只能使用CGImageRef,CGColorRef.
l4>隐式动画(可动画属性)什么是隐式动画?当对非Root Layer的部分属性进行修改时,默认会自动产生一些动画效果,而这些属性称为Animatable Properties (可动画属性).如: bounds :用于设置CALayer的宽度和高度,修改这个属性会产生缩放动画. background :用户设置CALayer的背景色,修改这个属性会产生背景色的渐变动画. position :用于设置CALayer的位置,修改这个属性会产生平移动画.
l5>可以通过动画事务(CATransaction)关闭默认的隐式动画效果.代码参考如下:
[CATransaction begin];
[CATransactionsetDisableActions:YES];
your code…
[CATransactioncommit];
l6>
UIView和CALayer的选择.通过CALayer就能做出根UIView一样的界面效果.都能实现相同的显示效果,请问:那究竟该选择谁好呢?其实,对比CALayer,UIView多了一个事件处理的功能,也就是说,CALayer不能处理用户的触摸事件,而UIView可以.所以,如果显示出来的东西需要跟用户进行交互的话,用UIView.UIView用来接收和处理系统事件,触摸事件.如果不需要跟用户进行交互,用UIView或者CALayer都可以.当然,CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级.