首页 > 代码库 > CALayer一些知识~...2

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);    }    }

挺好玩的一段代码~