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)