当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示,这里的图层就是CALayer。
CALayer的常用属性:
边框颜色(CGColorRef类型)
@property CGColorRef borderColor;
边框宽度
@property CGFloat borderWidth;
圆角半径
@property CGColorRef borderColor;
内容(比如设置为图片CGImageRef)
@property(retain) id contents;
宽度和高度
@property CGRect bounds;
位置(默认指中点,具体由anchorPoint决定)
@property CGPoint position;
锚点(x,y的范围都是0-1),决定了position的含义
@property CGPoint anchorPoint;
背景颜色(CGColorRef类型)
@property CGColorRef backgroundColor;
形变属性
@property CATransform3D transform;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self testView];
// [self testImageView];
[self testImageView2];
}
-(void)testImageView2
{
// self.myImageView.transform = CGAffineTransformMakeRotation(M_PI_4);
// self.myImageView.layer.transform = CATransform3DMakeScale(2, 1, 0);
// CATransform3DMakeRotation(M_PI_4, 0, 0, 1)以Z轴为旋转中心
// self.myImageView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);
// self.myImageView.layer.transform = CATransform3DMakeTranslation(10, 20, 0);
// CATransform3DMakeRotation(M_PI_4, 1, 1, 0)以X,Y轴所在平面的中心线为旋转中心
[self.myImageView.layer setValue:[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 1, 1, 0)] forKey:@"transform"];
}
-(void)testImageView
{
//边框颜色
self.myImageView.layer.borderColor = [UIColor blackColor].CGColor;
//边框宽度
self.myImageView.layer.borderWidth = 2;
//圆角
self.myImageView.layer.cornerRadius = 20;
//阴影颜色
self.myImageView.layer.shadowColor = [UIColor blackColor].CGColor;
//阴影偏移量
self.myImageView.layer.shadowOffset = CGSizeMake(10, 5);
//阴影透明度
self.myImageView.layer.shadowOpacity = 0.5;
//超出部分是否裁剪掉
//图片是在自层上绘制的,不设置layer层超出裁剪,图片圆角设置无效,设置了阴影无效
self.myImageView.layer.masksToBounds = NO;
}
-(void)testView
{
//边框颜色
self.myView.layer.borderColor = [UIColor blackColor].CGColor;
//边框宽度
self.myView.layer.borderWidth = 2;
//圆角
self.myView.layer.cornerRadius = 10;
//阴影颜色
self.myView.layer.shadowColor = [UIColor blackColor].CGColor;
//阴影偏移量
self.myView.layer.shadowOffset = CGSizeMake(10, 5);
//阴影透明度
self.myView.layer.shadowOpacity = 0.5;
//超出部分是否裁剪掉
self.myView.layer.masksToBounds = NO;
}
@end
隐式动画:
当对非Root Layer的部分属性进行修改时,默认会自动产生一些动画效果,而这些属性称为Animatable Properties(可动画属性)
-(void)testLayer
{
self.layer = [CALayer layer];
self.layer.bounds = CGRectMake(0, 0, 100, 100);
self.layer.position = CGPointZero;
self.layer.backgroundColor = [UIColor blueColor].CGColor;
self.layer.anchorPoint = CGPointZero;
[self.view.layer addSublayer:self.layer];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//可以通过动画事务(CATransaction)关闭默认的隐式动画效果
[CATransaction begin];//开启事务
[CATransaction setDisableActions:YES];//关闭事件
self.layer.position = CGPointMake(100, 300);
[CATransaction commit];//提交事务
}
网友评论