CALayer和position和anchorPoint
CALayer :负责视图中显示内容和动画
UIView:负责监听和响应事件
UIVIew创建的时候,会自动创建一个图层,图形都会绘制在上面,然后复制一份给屏幕,就完成了view的显示;
CALayer的属性:
self.imageView.layer.borderwidth=5;边框宽度
borderColor=[UIColor redColor].CGcolor;边框颜色
Cornerradius=50;圆角
layer.maskToBounds=YES;超出部分裁剪掉;
layer.shadowcolor;阴影颜色;
layer.shadowOffset=CGSizeMake(10,10);阴影偏移
layer.shadowopacity=0.5;阴影透明度;
layer.shadowRadius=10;阴影模糊度;
如果要出现带阴影的圆环,需要绘图操作;
=======================
手动创建layer图层添加到view的图层上
//手工创建CALayer
CALayer * redLayer = [CALayerlayer];
//设置背景颜色
redLayer.backgroundColor = [UIColorgreenColor].CGColor;
//设置frame position可以理解为center
redLayer.position = CGPointMake(200, 200);
redLayer.bounds = CGRectMake(0, 0, 100, 100);
//添加
[self.view.layeraddSublayer:redLayer];
//设置圆角
// redLayer.cornerRadius = 50;
//设置透明度 (0---1)
// redLayer.opacity = 0.3;
//设置内容
redLayer.contents = (__bridgeid_Nullable)([UIImageimageNamed:@"img01"].CGImage);
//设置圆角
redLayer.cornerRadius = 50;
//加边框
redLayer.borderWidth = 5;
redLayer.borderColor = [UIColorredColor].CGColor;
redLayer.masksToBounds= YES;
position和anchorPoint的区别
//手工创建
CALayer * myLayer = [[CALayeralloc]init];
//设置背景颜色
myLayer.backgroundColor = [UIColorredColor].CGColor;
//设置位置和大小
myLayer.position = CGPointMake(50, 50);
myLayer.bounds = CGRectMake(0, 0, 100, 100);
//设置锚点 (position决定layer在父视图的位置 anchorPoint决定了position在自身的位置) anchorPoint的取值范围 (0---1) 默认 (0.5,0.5)
myLayer.anchorPoint = CGPointMake(0, 1);
[self.view.layeraddSublayer:myLayer];
=========================
calayer 的transform属性
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//手工创建
CALayer * redLayer = [CALayerlayer];
//设置背景颜色
redLayer.backgroundColor = [UIColorredColor].CGColor;
//位置和大小
redLayer.position = CGPointMake(100, 100);
redLayer.bounds = CGRectMake(0, 0, 100, 100);
[self.view.layeraddSublayer:redLayer];
self.redLayer = redLayer;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//旋转
// self.redLayer.transform = CATransform3DRotate(self.redLayer.transform, M_PI_4, 1, 1, 0);
// self.redLayer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);
//KVC
// NSValue * value = [NSValue valueWithCATransform3D:CATransform3DRotate(self.redLayer.transform, M_PI_4, 100, 0, 0)];
//
// [self.redLayer setValue:value forKeyPath:@"transform"];
[self.redLayersetValue:@(M_PI_4)forKeyPath:@"transform.rotation.x"];
}
- (void) test02
{
//缩放
// self.redLayer.transform = CATransform3DScale(self.redLayer.transform, 1, 1, 0.5);
// self.redLayer.transform = CATransform3DMakeScale(0.5, 0.5, 1);
//KVC
// NSValue * value = [NSValue valueWithCATransform3D:CATransform3DScale(self.redLayer.transform, 0.5, 0.5, 1)];
//
// [self.redLayer setValue:value forKeyPath:@"transform"];
[self.redLayersetValue:@0.5forKeyPath:@"transform.scale.x"];
}
- (void) test01
{
//平移
// self.redLayer.transform = CATransform3DTranslate(self.redLayer.transform, 50, 0, 0);
// self.redLayer.transform = CATransform3DMakeTranslation(50, 50, 0);
//KVC
// NSValue * value = [NSValue valueWithCATransform3D:CATransform3DTranslate(self.redLayer.transform, 50, 50, 0)];
//
// [self.redLayer setValue:value forKeyPath:@"transform"];
// [self.redLayer setValue:@50 forKeyPath:@"transform.translation.y"];
}
UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(100, 100, 50, 50)];
lbl.text=@"";
lbl.backgroundColor=[UIColor redColor];
lbl.textColor=[UIColor whiteColor];
lbl.layer.cornerRadius=25;
lbl.layer.masksToBounds=YES;//或者用lbl.clipsToBounds=YES;UIView ,UIButton可以不用设置这个,UILabel必须设置这个才有效
[self.view addSubview:lbl];