美文网首页
000-Core Animation介绍

000-Core Animation介绍

作者: 紫荆秋雪_文 | 来源:发表于2016-12-19 17:56 被阅读6次

1、关于Core Animation

  • Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做 "图层树"的体系之中
  • 于是这个 "图层树" 形成了UIKit以及在iOS应用程序当中你所能在屏幕上看见的一切的基础

2、图层与视图

视图

  • 1、一个视图就是在屏幕上显示的一个矩形块(比如:图片、文字、视频),它能够拦截类似于鼠标点击或者触摸手势登用户输入
  • 2、视图在层级关系中可以相互嵌套,一个视图可以管理它的所有 "子视图"的位置
  • 3、在iOS当中,所有的视图都从一个叫做 UIView 的基类派生而来,UIView可以处理触摸时间,可以支持基于Core Graphics绘图,可以做仿射变换(比如:旋转或者缩放)

图层CALayer

  • 1、CALayer 类在概念上和UIView类似,同样也是一些被层级关系树管理的矩形块,同样也可以包含一些内容(比如:图片、文本)管理子图层的位置,它们有一些方法和属性用来做动画和变换
  • 2、和UIView最大的不同是CALayer不处理用户交互

3、图层和视图的平行的层级关系

  • 1、每一个UIView都有一个CALayer实例的图层属性,也就是所谓的backing layer,"视图"的职责就是创建并管理这个"图层",以确保当子视图在层级关系中添加或者移除时候,他们关联的图层也同样对应在层级关系树当中有相同的操作

  • 2、实际上这些背后关联的"图层"才是真正用来在屏幕上显示和做动画,UIView仅仅是对它的一个封装,提供了一些iOS类似于处理触摸的具体功能,以及Core Animation底层方法的高级接口

  • 3、为什么iOS要基于 UIView 和 CALayer 提供两个平行的层级关系呢?为什么不用一个简单的层级来处理所有事情呢?:为了就是要做到职责分离,这样也能避免很多重复代码

  • 4、实际上,这里并不是两个层级关系,而是四个,每一个都扮演不同的角色

  • 视图层级

  • 图层树

  • 呈现树

  • 渲染树

4、通过一个实例:给一个视图中的图层添加一个“子图层”


#import "ViewController.h"
//#import <QuartzCore/QuartzCore.h>

@interface ViewController ()
/**
 *  layerView
 */
@property (nonatomic, strong) UIView *layerView;

/**
 *  blueLayer
 */
@property (nonatomic, strong) CALayer *blueLayer;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 背景颜色
    self.view.backgroundColor = [UIColor darkGrayColor];
    // View
    self.layerView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
    self.layerView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:self.layerView];
    
    //blueLayer
    self.blueLayer = [CALayer layer];
    self.blueLayer.frame = CGRectMake(50, 50, 100, 100);
    self.blueLayer.backgroundColor = [UIColor blueColor].CGColor;
    [self.layerView.layer addSublayer:self.blueLayer];
}



@end

小结

  • 一个视图只有一个相关的图层(自动创建),同时它也可以支持添加无数多个子图层

相关文章

网友评论

      本文标题:000-Core Animation介绍

      本文链接:https://www.haomeiwen.com/subject/upptvttx.html