CALayer一些知识~...2

那既然CALayer是负责UIView上显示内容的,那我们如果想在UIView上展示一些内容能不能直接创建CALayer然后添加到UIView上的CALayer上呢?答案是肯定的(但是CALayer不能脱离UIView直接显示给用户,必须添加到UIView上的CALayer

 // 1. 自定义一个子图层,添加到当前根视图中
    CALayer *myLayer = [CALayer layer];
    
    myLayer.frame = CGRectMake(0, 0, 320, 100);

   myLayer.backgroundColor = [UIColor redColor].CGColor

// 2. 添加到跟图层
    [self.view.layer addSublayer:myLayer];
    

基本跟创建一个UIView一样,创建完成添加到UIView的Layer上即可显示

但是给CALayer设置背景色的时候不能用UIColor,而要使用更底层的CGColor,UIColor已经提供了一个属性来取出CGColor

效果如下

但是跟设置UIView的大小位置不同的是CALayer可以通过设置position和bounds属性来设置其位置和大小,并且可以通过设置锚点(anchorPoint)来设置位置

什么是锚点呢?锚点的数值怎么取呢?

锚点就类似于一个视图上的定位点默认是(0.5,0.5)这么一个点,这里面的0.5不是坐标,而是相对与自身的大小而言的看下图

某一个Layer的锚点其实就是相对于自身长宽比例点,默认(0.5,0.5)就是Layer的中心点如果改为(0,0)就是Layer的左上角的点(1,1)就是右下角的点

锚点是跟position属性结合用的,设置Layer的position是以锚地为基准点的(这句话怎么理解呢?)

加入一个图层mLayer的锚点是(0,0)(左上角的点)这时设置Layer的position属性为(100,100),那Layer上哪一个点重合呢,很显然就是跟锚点重合啦~~

下面我们来看下效果,看下面这个段代码

 // 1. 自定义一个子图层,添加到当前根视图中
    CALayer *myLayer = [CALayer layer];
    
    // 设置图层的属性
    // 1) 大小
    myLayer.bounds = CGRectMake(0, 0, 100, 100);
    // 2) 位置
    myLayer.position = CGPointMake(100, 100);
    // 3) 背景颜色
    myLayer.backgroundColor = [UIColor redColor].CGColor;
    // 4) 设置锚点,又称定位点,默认值是(0.5, 0.5) 数值范围0~1
    myLayer.anchorPoint = CGPointMake(0, 0);
   // myLayer.anchorPoint = CGPointMake(1, 1);
    // 2. 添加到跟图层
    [self.view.layer addSublayer:myLayer];
    

当上面锚点为0,0的时候效果如左图,1,1的时候如右图

既然Layer可以显示内容,图片当然不能少啦

Layer如何加载图片呢?

看下面的代码

  // 提示:要使用图像,不能直接使用UIImage,需要转换成CGImage,再使用id强转即可
   UIImage *image = [UIImage imageNamed:@"头像1"];
    myLayer.contents = (id)[image CGImage];

只需要设置Layer的contents属性就可以了,但是设置图片的时候也不能用UIImage而是要用CGImage~

但是这种设置的图片无法与用户交互

通过下面的示例代码(结合Touch事件)你可以很好地理解锚点

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 1. 自定义一个子图层,添加到当前根视图中
    CALayer *myLayer = [CALayer layer];
    
    // 设置图层的属性
    // 1) 大小
    myLayer.bounds = CGRectMake(0, 0, 100, 100);
    // 2) 位置
    myLayer.position = CGPointMake(100, 100);
    // 3) 背景颜色
    myLayer.backgroundColor = [UIColor redColor].CGColor;
    // 4) 设置锚点,又称定位点,默认值是(0.5, 0.5) 数值范围0~1
    myLayer.anchorPoint = CGPointMake(0, 0);
    
    // 5) 设置图像
    // 提示:要使用图像,不能直接使用UIImage,需要转换成CGImage,再使用id强转即可
   UIImage *image = [UIImage imageNamed:@"头像1"];
    myLayer.contents = (id)[image CGImage];
    
    // 2. 添加到跟图层
    [self.view.layer addSublayer:myLayer];
    
    //self.myLayer = myLayer;
}

#pragma mark - 触摸事件
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (self.myLayer.anchorPoint.x == 0) {
        self.myLayer.anchorPoint = CGPointMake(1.0, 1.0);
    } else {
        self.myLayer.anchorPoint = CGPointMake(0.0, 0.0);
    }
    
}

挺好玩的一段代码~

原文地址:https://www.cnblogs.com/xyzaijing/p/3841698.html