zoukankan      html  css  js  c++  java
  • iOS-Core-Animation-Advanced-Techniques 要点小结。

      iOS Core-Animation 高级技术这书之前看了一遍,第二次看时发现第一次看的理解过的内容又要重新想一遍,所以就记录下来,方便快速回忆,查阅。实践性不需要怎么样理解的一般只有内容概括。

    一、图层树

      1、图层与视图:每一个视图UIView都默认关联着一个图层CALayer.一个视图树中就会有一个平行的图层树相关联。视图封装了与平台相关的触摸事件处理。图层只负责与显示相关的。

    二、寄宿图

      contents属性,要给个CGImage、contentGravity内容显示方式,如居中,放大填充等。maskToBounds 裁剪。contentsCenter其实是九宫切。自定画layer就可以实现CALayerDelegate。

     

    三、图形几何学

        frame、bounds、center、postion、anchorPoint.之间的关系。

    首先有公式:

      frame.origin.x = postion.x - anchorPoint.x*bounds.size.width。

      frame.origin.y = postion.y - anchorPoint.y*bounds.size.height。

      即:postion.x = frame.origin.x + anchorPoint.x*bounds.size.width

        postion.y = frame.origin.y + anchorPoint.y*bounds.size.height

    1、frame 与 bounds.  frame是相对父view坐标系下的坐标.bounds是相对于自身坐标系下的坐标。修改bound.origin会改变自身坐标系的原点,从而其子view是会被移动,但自身不会动,而且这个修改还会有叠加效果,即a addSubView b  b addSubView c.  c 就会叠加对于a、b 对bound.origin修改从而移动。

    2、position、anchorPoint、frame .  position与anchorPoint是重合的点,只是他们的表示方式与参照系是不一样的。position的参照是父layer坐标系中的坐示,anchorPoint是参照layer本身坐标系中以宽高的比例,通常是(0~1).但也可以设置为其它值。

    3、修改position、anchorPoint其它一个,不会影响另一个在其坐标系上的值。所以修改其中一个frame.origin会变。

    4、修改bounds的宽高,position与anchorPoint不变,但frame会变。

    5、anchorPoint还是一个参照点,所有的变形操作以它为参照点。

    6、虽然layer不处理件,便它也有一系列接口辅助处理触摸事件相关需求。

    四、视觉效果

    这里面没什么只是有一些简单的圆角、阴影、组合透明及mask实现一些特殊的效果

    五、变换

    变换里面有一系列系统api帮助我们方便的进行变换

    六、专有图层

      有一系列的专用图层供我们用,当我们用系统控件实现不方便是可以考虑。CAShapeLayer、CATextLayer、CATransformLayer、CAGradientLayer、CAReplicatiorLayer、CAScrollerLayer、CATiledLayer、CAEmitterLayer、CAEAGLLayer、AVPlayerLayer.但是直接使用Layer不会有UIView中的那些自动布局的特性。一般做法重写layerClass 返回对应要使用的layer,作为View的默认Layer.

     

    七、八。隐式动画、显示动画

       隐式动画:当改变了CALayer的可动画属性时,CALayer会以动画的方式转换到新的属性值,这种是就是属性动画。系统会在每个run loop周期中自动开始一次新的事务CATranscation(老是混淆CATransition)。iOS4 Block出来后,苹果推出了一套以UIView 接口,在block内写动画体。CALayer的presentationLayer方法返回呈现, modelLayer返回模型。通过presentationLayer和hitTest可以返让动画中的layer响应事件。CALayer隐式动画实步骤:

    1、图层检查是否有代理CALayerDelegate,从delegate的-actionForLayer:forKey:方法反返回动画结果。

    2、1没有就是查actions字典,没有再查style字典,否则再从标准行为defaultActionForKey:中查。

    最终有结果就会有动画,返回nil就不会有动画。

    3、UIView就是通过-actionForLayer:forKey:对所有返回nil,禁用了它所关联默认Layer的隐式动画。

    4、动画分类,基础动画、动画组。隐式过渡CATransition。

    九、图层时间

     speed:动画的速度、对于一个时长为1秒的动话,设置speed为2.0那么动画其实0.5秒就会结束。

    timeoffset:快进到某一点,那那一点开始。

    speed和提么offset属性会影响到子动画。动画时间有converTime:fromLayer的接口转换不同的参考系。

    通过speed设置0,手动调整timeoffset可以实现手势动画。

      

     

     

  • 相关阅读:
    Dockerfile基于centos镜像编译安装httpd
    Dockerfile基于centos镜像编译安装nginx
    Dockerfile介绍和常用指令
    Docker存储卷
    正则表达式
    Sed与Awk
    Shell函数
    Shell脚本基础
    Autofs
    Podman
  • 原文地址:https://www.cnblogs.com/chenxianming/p/iOS.html
Copyright © 2011-2022 走看看