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可以实现手势动画。

  

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2017-02-09 15:25  chenxianming  阅读(224)  评论(0编辑  收藏  举报

导航