zoukankan      html  css  js  c++  java
  • CALayer一些知识~...3

    CALayer回吐的先后顺序是怎样的呢?CALayer绘图时是先绘制父Layer的内容,然后绘制子Layer的内容,这样便可以让子Layer显示在父Layer上面

    •要在CALayer上绘图,有两种方法:
    1.创建一个CALayer的子类,然后覆盖drawInContext:方法,可以使用Quartz2D API在其中进行绘图
    2.设置CALayer的delegate,然后让delegate实现drawLayer:inContext:方法进行绘图
    •注意:
    –不能再将UIView设置为这个CALayer的delegate,因为UIView对象已经是内部层的delegate,再次设置会出问题
    –无论使用哪种方法,都必须向层发送setNeedsDisplay消息,以触发相应绘图方法的调用
     
     
    •当UIView收到setNeedsDisplay消息时,CALayer会准备好一个CGContextRef,然后向它的delegate即UIView,发送消息,并且传入已经准备好的CGContextRef对象。UIView在drawLayer:inContext:方法中会调用自己的drawRect:方法
    •平时在drawRect:中通过UIGraphicsGetCurrentContext()获取的就是由CALayer传入的CGContextRef对象,在drawRect:中完成的所有绘图都会填入CALayer的CGContextRef中,然后被拷贝至屏幕
    CALayer的CGContextRef用的是位图上下文(Bitmap Graphics Context)
     
     
    当在UIView类中写了drawLayer:inContext:方法以后,需要调用该方法的super方法,来绘制内容,否则则不会绘制当前视图的Layer内容(不调用视图的DrawRect:方法)
    如果在一个仕途上添加一个Layer,调用顺序是
    调用视图的init方法初始化视图和layer--->调用layer代理即视图的方法drawLayer:inContext:,然后调用drawRect:方法,,最后调用子Layer的

    drawInContext:方法

    其他Layer只知识:

    •每一个UIView内部都默认关联着一个CALayer,称这个Layer为Root Layer。所有的非Root Layer都存在着隐式动画,隐式动画的默认时长为1/4秒。
    •当修改非Root Layer的部分属性时,相应的修改会自动产生动画效果,能执行隐式动画的属性被称为“可动画属性”,诸如:
    1.bounds: 缩放动画
    2.position: 平移动画
    3.opacity: 淡入淡出动画(改变透明度)
    •在文档中搜素animatable可以找到所有可动画属性
    •如果要关闭默认的动画效果,可以通过动画事务方法实现:

    [CATransaction begin];

    [CATransaction setDisableActions:YES];

    // ...

    [CATransaction commit];

  • 相关阅读:
    zookeeper安装和使用(Windows环境)
    eclipse如何以指定JDK启动
    unity 与 android 协调工作 注意事项
    unity 嵌入 百度分享 与 游戏内购物 iap
    unity 引用 移动mm 支付sdk
    unity 基础之PhysicsManager
    Unity3d与android通信
    Unity3D连接真机调试教程,可抓断点
    Unity之串口通信(基于三姿态传感器)
    unity3d中dllimport方法的使用,以接入腾讯平台为例!!!
  • 原文地址:https://www.cnblogs.com/xyzaijing/p/3841831.html
Copyright © 2011-2022 走看看