iOS Core Animation笔记--UIView和CALayer

    xiaoxiao2021-03-25  9

    UIView

    iOS中所有的视图均是从UIVIew派生的,UIVIew可以处理触摸事件、支持Core Graphics绘图、可以做仿射变换(例如旋转、缩放)、也可以做一些滑动或渐变的动画

    CALayer

    CALayer类似UIVIew,也还一些被层级关系树管理的块,CALayer(图层)可以包含图片、文字等内容,可以管理自己的子图层,也有一些方法和属性用来做动画和变换。

    但是和UIView不同的是,CALayer不能响应事件,它不清楚响应链,即使它有一些判断点是否在自己的范围内,

    UIView和CALayer

    UIView的层级关系对应着一个平行的CALayer层级关系,每一个UIView有关联这一个CALayer的实例,视图的职责就是创建和管理这个图层(当子视图添加或删除的时候,他们关联的图层在对应的层级关系树中也会有相应的操作)以及处理触摸事件等,CALayer才是真正的用来做屏幕上的显示和动画,UIView仅是对它的封装,提供一些接口然我们可以简单的设置该视图对应的图层

    之所以不用一个层级处理所有的事是为了职责分离

    图层可以做的功能 (1)阴影、圆角、带颜色的边框 (2)3D变换 (3)非矩形的范围 (4)透明遮罩 (5)非线性的动画

    使用CALayer的例子

    下面的例子可一说明两点 (1)说明视图View的原点在左上角,而CALayer图层的原点在view的左上角,个人认为原因是将blueLayer添加到view中 (2)一个视图只有一个关联的图层(自动创建的),但是可以给它添加无数个图层,其实添加的图层是添加到关联的图层的图层树中

    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(self.view.frame.size.width/2-100, self.view.frame.size.height/2-100, 200, 200)]; view.backgroundColor = [UIColor whiteColor]; [self.view addSubview:view]; //view中添加红色view UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(self.view.frame.size.width/2-50, self.view.frame.size.height/2-50, 100, 100)]; view1.backgroundColor = [UIColor redColor]; [self.view addSubview:view1]; //view中添加蓝色Layer CALayer *blueLayer = [CALayer layer]; //CGRectMake(0, 0, 100, 100)对应第一个图, // blueLayer.frame = CGRectMake(0, 0, 100, 100); //对应第二个图 blueLayer.frame = CGRectMake(0, 20, 100, 100); blueLayer.backgroundColor = [UIColor blueColor].CGColor; [view.layer addSublayer:blueLayer];

    转载请注明原文地址: https://ju.6miu.com/read-149699.html

    最新回复(0)