zoukankan      html  css  js  c++  java
  • Objective-C Core Animation深入理解

    Core Animation(核心动画),是从Layer Kit(图层工具包)演变而来的,不仅仅可以用来做动画。

    1、视图 

    一个视图就是屏幕上显示的一个矩形,例如文字、图片和视频。

    视图是UIView(NSView)或者其子类,它可以响应鼠标点击和触摸手势等用户操作,可以支持基于Core Graphics绘图,可以做仿射变换,可以做滑动和渐变等动画。

    视图可以互相嵌套,形成层级关系树,一个视图可以管理它的子视图。

    2、图层

    图层就是各种layer,其中最常用的是CALayer。CALayer也是个矩形,可以设置背景色和图片等。同样会形成层级关系树,管理子图层,也可以做变换和动画。不过,CALayer不响应用户的操作。

    3、视图和图层的关系

    UIView是CALayer的封装。每一个UIView都包含一个CALayer属性,即backing layer(背衬层)。

    @property (nullable, strong) CALayer *layer;

    视图和图层的层级关系是平行的,真正能在屏幕上显示和做动画的是图层。

    4、图层的简单使用

    // 创建子图层
    CALayer *blueLayer = [CALayer layer];
    blueLayer.frame = CGRectMake(50.0f, 50.0f, 100.0f, 100.0f);
    blueLayer.backgroundColor = [UIColor blueColor].CGColor;
    // 把子图层加到视图的图层中
    [self.view.layer addSublayer:blueLayer];

    5、寄宿图

    顾名思义,即寄宿在图层中的图。CALayer有个contents属性

    /* An object providing the contents of the layer, typically a CGImageRef,
     * but may be something else. (For example, NSImage objects are
     * supported on Mac OS X 10.6 and later.) Default value is nil.
     * Animatable. */
    
    @property(nullable, strong) id contents;

    6、自定义绘图

    给contents属性赋值不是设置寄宿图的唯一方法,可以通过继承UIView并重写drawRect方法,使用Core Graphics直接绘制寄宿图。 

    对于UIView,寄宿图不是必须的。但是如果UIView检测到drawRect方法被调用了,就会为视图分配一个寄宿图,这个寄宿图的像素尺寸等于视图大小乘以contentsScale。

    https://bihongbo.com/2016/01/03/memoryGhostdrawRect/  

    If you subclass UIView directly, your implementation of this method does not need to call super.
    - (void)drawRect:(NSRect)dirtyRect {
        [super drawRect:dirtyRect];
        
        // Drawing code here.
    }

    14、图像IO

    加载,解码,渲染

    图片缓存

    离屏渲染

    参考链接:

    https://zsisme.gitbooks.io/ios-/

  • 相关阅读:
    [研究笔记]SPFA加上SLF时判负环的条件
    hdu 1290
    hdu 2135
    hdu 1978 how many way
    华中区全国程序设计邀请赛1003
    华中区程序设计大赛1010
    华中程序设计邀请赛1007
    华中区全国设计邀请赛1009
    hdu 2114的补充
    华中区全国设计邀请赛1004
  • 原文地址:https://www.cnblogs.com/yangwenhuan/p/9920912.html
Copyright © 2011-2022 走看看