CALayer02-创建新图层

it2022-05-05  127

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)          

 

转载于:https://www.cnblogs.com/yipingios/p/4498306.html

相关资源:各显卡算力对照表!

最新回复(0)