博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS之CALayer的使用和position和anchorPoint
阅读量:4289 次
发布时间:2019-05-27

本文共 3659 字,大约阅读时间需要 12 分钟。

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

转载地址:http://dqlgi.baihongyu.com/

你可能感兴趣的文章
jdbc_javax包
查看>>
Android 6.0 APIs_新特性(google官方)
查看>>
maxwell斗胆也来谈谈"学习方法“_转自黑马论坛
查看>>
XML解析
查看>>
AndroidManifest.xml详解
查看>>
activity的xml详解
查看>>
JNI 简介与实现-JavaNativeInterface
查看>>
ResourceBundle和Properties
查看>>
javascript *** is not a function
查看>>
老韩思考:卖点----卖豆腐的能转行IT
查看>>
Android_属性动画
查看>>
网络下载-xUtils,HttpUtils
查看>>
网络下载-AsyncHttpClient
查看>>
myUtils-多线程下载
查看>>
网络下载-断点续传原理
查看>>
线程-消息回环处理机制
查看>>
感谢伤害我的人
查看>>
请不要做浮躁的人----(学习编程的忠告)
查看>>
网络_volley_使用方法和代码
查看>>
网络_AsyncHttpClient_使用方法和代码
查看>>