CALayer02-创建新图层

1、KVC可以做到很精确,key中属性的获取:Window—>Documentation and API Reference—>搜索CATransform3d下面的CATransform3d key paths

表格中的属性不需要背,只要知道rotation:旋转  scale:缩放  translation:平移就可以了,没事的时候一个个试试

 会出现一个表格,表格的左边是KVC中key中transform.后面所跟的属性

    //value为数值对象的话,需要包装为NSNumber对象
    [self.testIamgeView.layer setValue:@(0.5) forKeyPath:@"transform.scale.y"];

    //value为结构体的话,需要包装为NSValue对象
    [self.testIamgeView.layer setValue:[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 1, 1, 0)] forKeyPath:@"transform"];

2、UIView创建的时候,本身就会自动创建一个layer对象,我们也可以自己创建一个图层layer对象

 //新建layer
    CALayer *layer = [CALayer layer];
    layer.backgroundColor = [UIColor redColor].CGColor;
    layer.bounds = CGRectMake(0, 0, 100, 100);
    //position属性layer有,view是没有的
    layer.position = CGPointMake(200, 100);
    layer.cornerRadius = 10;
    layer.masksToBounds = YES;
    //将UI类型转为CG类型,CG是C语音类型,转为id(OC类型)需要进行强换
    //固定写法
    layer.contents = (id)[UIImage imageNamed:@"111.png"].CGImage;
    [self.view.layer addSublayer:layer];

3、layer使用CGColor而不是用UIColor的原因,关于CALayer的疑惑

•首先

CALayer是定义在QuartzCore框架中的
CGImageRef、CGColorRef两种数据类型是定义在CoreGraphics框架中的
UIColor、UIImage是定义在UIKit框架中的
 
•其次
QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用
但是UIKit只能在iOS中使用
 
•为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef

QuartzCore如果用了UIKit的东西,代表QuartzCore只能用在IOS中,就不可以使用在Mac OS X上了,所以QuartzCore只能用CoreGraphics,这样保证可移植性,iOS和Mac都可以使用。

 

4、UIView和CALayer的选择

•通过CALayer,就能做出跟UIImageView一样的界面效果
•既然CALayer和UIView都能实现相同的显示效果,那究竟该选择谁好呢?
其实,对比CALayer,UIView多了一个事件处理的功能。也就是说,CALayer不能处理用户的触摸事件,而UIView可以
所以,如果显示出来的东西需要跟用户进行交互的话,用UIView;如果不需要跟用户进行交互,用UIView或者CALayer都可以
当然,CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级
 
5、position和anchorPoint
•CALayer有2个非常重要的属性:position和anchorPoint
•@property CGPoint position;
用来设置CALayer在父层中的位置
以父层的左上角为原点(0, 0)
 
•@property CGPoint anchorPoint;
称为“定位点”、“锚点”
决定着CALayer身上的哪个点会在position属性所指的位置
以自己的左上角为原点(0, 0)
它的x、y取值范围都是0~1,默认值为(0.5, 0.5)
 
 
 
 
 

 

posted on 2015-05-12 19:25  快乐加油站789  阅读(213)  评论(0编辑  收藏  举报

导航