iOS之CALayer的使用和position和anchorPoint

本文详细介绍了 iOS 开发中 CALayer 的使用方法,包括如何创建和设置 CALayer 的各种属性如边框、圆角等,以及 position 和 anchorPoint 的区别,并展示了如何通过 transform 实现旋转、缩放和平移效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的CALayer的注意事项=======

 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];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值