使用核心动画 需导入QuartzCore 框架(现在不需要)
#import <QuartzCore/QuartzCore.h>
Core Animation 核心动画 CA
CALayer 和 UIView 的关系:
在UIView 中有一个layer属性作为根图层,根图层没有隐式动画,根图层上可以放其他子视图,在UIView中能够看到的内容都包含在layer中
CALayer 负责视图上显示的内容和动画
UIView负责监听和响应事件
CALayer在修改他的属性时都能形成动画效果 这种动画效果 叫做隐式动画。
由于CALayer在设计之初就考虑它的动画操作功能,CALayer很多属性在修改时都能形成动画效果,这种属性称为“隐式动画属性”。
--------------------------------------------------------
CALayer常用属性
属性 说明 是否支持隐式动画
anchorPoint 锚点、定位点 锚点的描述是相对于 *自己* x、y位置比例而言的 默认在图像中心点(0.5,0.5)的位置 决定图层的哪一个点 显示在中心点的位置 是
backgroundColor 图层背景颜色 是
borderColor 边框颜色 是
borderWidth 边框宽度 是
bounds 图层大小 是
contents 图层显示内容,例如可以将图片作为图层内容显示 是
contentsRect 图层显示内容的大小和位置 是
cornerRadius 圆角半径 是
doubleSided 图层背面是否显示,默认为YES 否
frame 图层大小和位置,不支持隐式动画,所以CALayer中很少使用frame,通常使用bounds和position代替 否
hidden 是否隐藏 是
mask 图层蒙版 是
maskToBounds 子图层是否剪切图层边界,默认为NO 是
opacity 透明度 ,类似于UIView的alpha 是
position 决定图层在父视图的位置 图层位于 *父视图* 中心点位置,类似于UIView的center 是
shadowColor 阴影颜色 是
shadowOffset 阴影偏移量 是
shadowOpacity 阴影透明度,注意默认为0,如果设置阴影必须设置此属性 是
shadowPath 阴影的形状 是
shadowRadius 阴影模糊半径 是
sublayers 子图层 是
sublayerTransform 子图层形变 是
transform 图层形变
一、CALayer 的初始化及其常用属性
<span style="font-size:14px;color:#333333;"> myLayer = [[CALayer alloc]init];
myLayer.backgroundColor = [UIColor redColor].CGColor;
myLayer.bounds = CGRectMake(0, 0, 100, 100);
// 设置中心点
myLayer.position = self.view.center;
// 设置圆
myLayer.cornerRadius = 100/2;
myLayer.borderWidth = 2;
myLayer.borderColor = [UIColor whiteColor].CGColor;
myLayer.shadowColor = [UIColor yellowColor].CGColor;
myLayer.shadowOffset = CGSizeMake(-1, -1);
// 设置阴影颜色,必须设置 shadowOpacity 阴影颜色的透明度(默认是0,完全透明)
myLayer.shadowOpacity = 1.0;
</span><span style="font-size:14px;color:#ff0000;">// 子图层 是添加到根图层上的</span><span style="font-size:14px;color:#333333;">
[self.view.layer addSublayer:myLayer];</span>
二、图层覆盖,重叠
1、先定义一个图层
<span style="font-size:14px;"> myLayer = [[CALayer alloc]init];
myLayer.backgroundColor = [UIColor brownColor].CGColor;
myLayer.shadowColor = [UIColor redColor].CGColor;
myLayer.shadowOpacity = 1; // 如果不设置透明度的话,不会显示在设备上,默认为0,改为1.
width = 100;
myLayer.bounds = CGRectMake(0, 0, width, width);
myLayer.position = self.view.center;
myLayer.cornerRadius = width/2;
myLayer.borderWidth = 2;
myLayer.borderColor = [UIColor whiteColor].CGColor;
myLayer.shadowOffset = CGSizeMake(-1, -1);
[self.view.layer addSublayer:myLayer];</span>
2、定义第二个图层覆盖在第一个上
<span style="font-size:14px;"><span style="color:#33cc00;"> imageLayer = [[CALayer alloc]init];
imageLayer.shadowOpacity = 1; // 如果不设置透明度的话,不会显示在设备上,默认为0,改为1.
</span><span style="color:#ff6600;">imageLayer.bounds = myLayer.bounds;
imageLayer.position = myLayer.position;
imageLayer.cornerRadius = myLayer.cornerRadius;</span><span style="color:#33cc00;">
imageLayer.contents = (id)([UIImage imageNamed:@"105.jpg"].CGImage);
imageLayer.masksToBounds = YES;
[self.view.layer addSublayer:imageLayer];</span></span>