CALayer与UIView及一些基本的3D变换

柴嘉禧
2023-12-01


在iOS中,所有的视图都从一个叫做UIView的基类派生而来,UIView可以处理触摸事件,可以支持基于Core Graphics绘图,可以做仿射变换,或者简单的类似于滑动或者渐变的
动画。CALayer类在概念上和UIView类似,同样也是一些被层级树管理的矩形块,同样也包含一些内容(像图片,文本或者背景色),和UIView最大的不同是CALayer不处理用户的交互(iOS通过视图层级关系用来传送触摸事件的机制)。
每一个UIview都有一个CALayer实例的图层属性,也就是所谓的backing layer,它才是真正用来在屏幕上显示和做动画的,UIView仅仅是对它的一个封装,提供了一些iOS类似于处理触摸的具体功能,以及Core Animation底层方法的高级接口。在操作一般的动画时,UIView上又实现的接口,而有一些功能确实没有暴露出来的CALayer的功能:比如:阴影,圆角,带颜色的边框,3D变换,非矩形范围,透明遮罩,多级非线性动画等,


   self.firstView = [[UIView alloc] initWithFrame:CGRectMake(100, 164, 200, 200)];

    

    //“shadowOpacity是一个必须在0.0(不可见)和1.0(完全不透明)之间的浮点数。如果设置为1.0,将会显示一个有轻微模糊的黑色阴影稍微在图层之上。

    self.firstView.layer.shadowOpacity = 0.5f;

    //设置阴影,默认值是引用向下

    self.firstView.layer.shadowOffset= CGSizeMake(10.f, 20.f);

    //设置阴影颜色

    self.firstView.layer.shadowColor = [UIColor blackColor].CGColor;

    //设置阴影模糊度

    self.firstView.layer.shadowRadius = 5.f;

    

    self.firstView.backgroundColor = [UIColor whiteColor];

    [self.view addSubview:self.firstView];





   //仿射变换

    CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_4);

    self.firstView.layer.affineTransform = transform;

    

    //混合变换

    transform = CGAffineTransformIdentity; //scale by 50%

    transform = CGAffineTransformScale(transform, 0.5, 0.5);

    transform= CGAffineTransformRotate(transform, M_PI/180.0*30.0);

    transform = CGAffineTransformTranslate(transform, 200, 0);

    self.firstView.layer.affineTransform = transform;

    

    //3D变换

    CATransform3D transform3 = CATransform3DIdentity;

    //应用透视效果

    transform3.m34 = -1.0/500;

    transform3 = CATransform3DRotate(transform3, M_PI_4, 0, 1, 0);

    

    self.firstView.layer.transform = transform3;

    




 类似资料: