IOS开发

iOS UIView动画以及CA动画

2020-06-23  本文已影响0人  Sharif_su

UlView是iOS中所有的界面元素都继承自它,它本身完全是由CoreAnimation来实现的。每一 ^^ UlView内部都默认关联着一个layer,真正的绘图部分,是由一个叫CALayer (Core Animation Layer)的类来管理;

UlView有个layer属性,可以返回它的主CALayer实例,UlView有一个layerClass方法,返回主 layer所使用的类,UlView的子类,可以通过重载这个方法,来让UlView使用不同的CALayer来显 示; UlView的layer树形在系统内部,被维护着三份copy (presentLayer Tree、modeLayer Tree、 render Tree),修改动画的属性,其实是Layer的presentLayer的属性值;

动画的运作:对UlView的subLayer (非主Layer)属性进行更改,系统将自动进行动画生成。

区别

  1. UlView继承自UIResponder,能接收并响应事件,负责显示内容的管理;而CALayer继承自 NSObject,不能响应事件,负责显示内容的绘制;
  2. UlView侧重于展示内容,而CALayer则侧重于图形和界面的绘制;
    3.当View展示的时候,View是layer的CALayerDelegate,View展示的内容是由CALayer进行display 的;
  3. view内容展示依赖CALayer对内容的绘制,UlView的frame也是由内部的CALayer进行绘制;
    5.对UlView的属性修改,不会引起动画效果,但是对于CALayer的属性修改,是支持默认动画效果 的,在view执行动画的时候,view是layer的代理,layer通过actionForLayer: forkey向对应的 代理view请求动画action;
    6.每个UlView内部都有一个CALayer在背后提供内容的绘制和显示,并且UlView的尺寸样式 都由内部的Layer所提供,layer比view多了个anchorPoint;
  4. —个CALayer的frame是由其anchorPoint, position, bounds, transform共同决定的,而一 个UlView的的frame只是简单地返回CALayer的frame,同样UlView的center和bounds也只是简单 返回CALayer的Posit ion和Bounds对应属性。
上一篇下一篇

猜你喜欢

热点阅读