先了解下什么是图层(CALayer)
其实
UIView之所以能显示在屏幕上,完全是因为它内部的一个
图层
在创建
UIView
对象时,
UIView
内部会自动创建一个图层
(
即
CALayer
对象
)
,通过
UIView
的
layer
属性可以访问这个层
@property(nonatomic,readonly,retain) CALayer *layer;
当
UIView
需要显示到屏幕上时,会调用
drawRect:
方法进行绘图,并且会将所有内容绘制在
自己的图层上
,绘图完毕后,
系统会将图层拷贝到屏幕上
,于是就完成了
UIView
的显示
换句话说,
UIView本身不具备显示的功能,是它内部的层才有显示功能
CALayer
的属性
宽度和
高度
@property CGRect bounds;
位置
(
默认指中点,具体由
anchorPoint
决定
)
用来设置
CALayer
在父层中的位置
以父层的左上角为原点
(0, 0)
@property CGPoint position;
锚点
(x,y
的范围都是
0-1)
,决定了
position
的含义
称为
“
定位点
”
、“锚点”
决
定着
CALayer
身上的哪个点会在
position
属性所指的
位置
以自己的
左上角为原点
(0, 0
)
它的
x
、
y
取值范围都是
0~1
,
默认值为
(
0.5
,
0.5
)
@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两个重要的属性:position和anchorPoint
首先
CALayer
是定义在
QuartzCore
框架中的
CGImageRef
、
CGColorRef
两种数据类型是定义在
CoreGraphics
框架中的
UIColor
、
UIImage
是定义在
UIKit
框架中的
其次
QuartzCore
框架和
CoreGraphics
框架是可以跨平台使用的,在
iOS
和
Mac OS X
上都能使用
但
是
UIKit
只能在
iOS
中
使用
为了保证可移植性,QuartzCore不能使用
UIImage、
UIColor,只能使用
CGImageRef、
CGColorRef
简单使用:
// 设置尺寸
self.redView.layer.bounds = CGRectMake(0, 0, 100, 100);
// 设置边框的宽度
self.redView.layer.borderWidth = 10;
// 设置边框颜色
self.redView.layer.borderColor = [UIColor yellowColor].CGColor;
// 设置背景颜色
self.redView.layer.backgroundColor = [UIColor greenColor].CGColor;
// 设置圆角效果
// self.redView.layer.cornerRadius = 30;
// 剪掉圆角以外的部分
// self.redView.layer.masksToBounds = YES;
// 设置阴影的颜色
self.redView.layer.shadowColor = [UIColor redColor].CGColor;
// 设置阴影的透明度
self.redView.layer.shadowOpacity = 0.5;
// 阴影的位置(以redView左上角为原点)
self.redView.layer.shadowOffset = CGSizeMake(100, 100);
/*
*1.如果你设置了masksToBounds为YES,阴影是不出,原因,阴影也被切掉了
*2.如果你想有圆角的效果,又想有阴影,图片本来就有圆角效果
*3.获取话说:自己把图片转换成有圆角的图片,再显示
*/