zoukankan      html  css  js  c++  java
  • UIView 与 CALayer

    联系:

    1.

    UIView 有个属性 layer,可以返回它的主 CALayer 实例:
    CALayer *layer = myView.layer

    2.

    一个 UIView 可以有多个 CALayer, UIView 的尺寸样式都是由内部的 CALayer 来提供的

    3.

    两者都有树状层级结构,CALayer 有 subLayers, UIView 有 subViews

    区别:

    1.最大的区别

    CALayer 不能处理用户的触摸事件,而 UIView 可以
    UIView 继承自 UIResponder,可以处理用户的触摸事件
    CALayer 直接继承 NSObject,并没有相应的处理触摸事件的接口

    2.坐标系统

    CALayer 的坐标系统比 UIView 多了一个 anchorPoint 属性
    CALayer 具有以下属性:anchorPoint, position, bounds 和 transform 等
    UIView 具有以下属性:bounds, frame 等
    UIView 是由 CoreAnimation 来实现的。它真正的绘图部分,是由一个 CALayer 类来管理
    UIView 本身更像是一个 CALayer 的管理器,访问它的 frame,bounds 等,实际上内部都是在访问它所包含的 CALayer 的相关属性

    3.

    UIView 定义在 /System/Library/Frameworks/UIKit.framework
    CALayer 定义在/System/Library/Frameworks/QuartzCore.framework
    由此也可看出,UIView 侧重于对显示内容的管理,CALayer 侧重于对内容的绘制
    UIView 和 CALayer 是相互依赖的关系,UIView 依赖 CALayer 绘制的内容,CALayer 依赖 UIView 提供的容器来显示绘制的内容
    所以 CALayer 是基础,没有 CALayer,UIView 自身不会存在,然而,UIView 是 CALayer 的特殊实现,可响应触摸事件

    4.

    对于每一个 UIView 都有一个 layer,把这个 layer 且称作RootLayer,而不是 View 的根 Layer的叫做 非 RootLayer。我们对UIView的属性修改时时不会产生默认动画,而对单独 layer属性直接修改会

    在 Core Animation 编程指南的 “How to Animate Layer-Backed Views” 中,对为什么会这样做出了一个解释:

    UIView 默认情况下禁止了 layer 动画,但是在 animation block 中又重新启用了它们

    是因为任何可动画的 layer 属性改变时,layer 都会寻找并运行合适的 'action' 来实行这个改变。在 Core Animation 的专业术语中就把这样的动画统称为动作 (action,或者 CAAction)

    layer 通过向它的 delegate 发送 actionForLayer:forKey: 消息来询问提供一个对应属性变化的 action。delegate 可以通过返回以下三者之一来进行响应:

    它可以返回一个动作对象,这种情况下 layer 将使用这个动作
    它可以返回一个 nil, 这样 layer 就会到其他地方继续寻找
    它可以返回一个 NSNull 对象,告诉 layer 这里不需要执行一个动作,搜索也会就此停止
    当 layer 在背后支持一个 view 的时候,view 就是它的 delegate

    想继续了解请移步 View-Layer 协作

    参考

    记录园子里的一篇有关CALayer与UIView的关系
    详解 CALayer 和 UIView 的区别和联系

  • 相关阅读:
    模板-树链剖分
    bzoj2523 聪明的学生
    P1220 关路灯
    BZOJ3572 [Hnoi2014]世界树
    BZOJ4013 [HNOI2015]实验比较
    BZOJ4012 [HNOI2015]开店
    BZOJ4011 [HNOI2015]落忆枫音
    BZOJ4009 [HNOI2015]接水果
    BZOJ4010 [HNOI2015]菜肴制作
    BZOJ4008 [HNOI2015]亚瑟王
  • 原文地址:https://www.cnblogs.com/chenyg32/p/5185619.html
Copyright © 2011-2022 走看看