iOS 图像与性能

132 阅读3分钟

1、UIView和CALayer

(1)UIView中有个属性layer,是CALayer类型。

(2)UIView是CALayer的delegate。

(3)UIView继承自UIResponder,可以响应事件。

(4)CALayer继承自NSObject,包含要显示的内容contents,以及backgroundcolor,frame,bounds等控件的尺寸和样式。

(5)CALayer的contents中是backing store,实际上是bitmap类型的位图。

(6)两者都有层级结构。

(7)CALayer中透明度使用opacity表示而不是alpha;中心点使用position表示而不是center。

(8)CALayer的AnchorPoint、Position

  • anchorPoint属性是图层的锚点,范围在(01,01)表示在x、y轴的比例,这个点永远可以同position(中心点)重合,当图层中心点固定后,调整anchorPoint即可达到调整图层显示位置的作用(因为它永远和position重合) image.png

  • CALayer里的AnchorPoint(锚点):是相对于自身layer,iOS坐标系中(0,0), (1,1)分别表示左上角、右下角。AnchorPoint相当于支点,可以用作旋转变化、平移、缩放。

  • CALayer里的position: 是AnchorPoint点在superLayer中的位置坐标。position点是相对superLayer的。

  • 关于Position和AnchorPoint图示(如果修改anchorPoint则layer的frame会发生改变,position不会发生改变.修改position与anchorPoint中任何一个属性都不影响另一个属性)

    image.png

  • 最大差异:

  <1> UIView为CALayer显示提供基础,UIView负责处理触摸等事件,参与事件响应链。

  <2> CALayer只是负责提供内容contents的绘制和显示。

  • 补充:关于bounds的x和y的问题

    <1>示例代码一:只改变父视图的bounds的x、y

    image.png

    <2>效果一:子视图参考的坐标系原点向左和向上偏移了20

    image.png

<3>示例代码二:改变视图bounds的w和h,使其大于自己frame的w和h

image.png

<4>效果二:视图frame的x、y、w、h都变了50(撑大了)

image.png

  bounds的w和h,不仅会影响frame的w和h(两者的width和height保持一致),还会影响frame的x,y。这种影响是随着bounds的w和h增加或减少,平均扩充或缩减四周的区域。

<5>总结

它可以修改自己坐标系的原点位置,进而影响“子view”的显示位置(改变了子视图的参考原点)。 bounds可以通过改变宽高,改变自身的frame,进而影响到自己在父视图的显示位置和大小。

  • 补充:UIView关联的layer和单独的layer在动画上的不同

    <1> 隐式动画:我们并没有指定任何动画类型,仅仅改变了一个属性,然后CoreAnimation来决定如何并何时去做动画(区别于显示动画需要配置)。当我们改变一个属性的时候,CoreAnimation是如何判断动画类型和持续时间(默认0.25s)的呢?实际上动画执行的时间取决于当前事务的设置,动画类型取决于图层行为。

    <2>禁用关联图层的隐式动画: 隐式动画会被layer的关联图层禁用(UIView下的layer会禁用):当属性在动画块之外发生变化,UIView调用actionForKey直接返回nil来禁用了隐式动画。但在动画块之内,根据动画具体类型返回相应属性。   UIView关联的图层禁用了隐式动画,对这种图层做动画的唯一方法就是使用UIView的动画函数,而不是依赖CATransaction;或者继承UIView,并覆盖actionForlayer:forkey方法;或者直接创建一个显式动画。

    <3>控制非关联图层的隐式动画:   对于单独存在的的图层,我们可以通过实现图层-actionForLayer:forkey:委托方法,或者提供一个actions字典来控制隐式动画的行为(设置动画的行为)。控制动画时间还是依赖CATransaction(事务)。

   <4>关闭layer的隐式动画: 手动关闭[CATransaction setDisableActions:YES]

   <5> 参考 :www.jianshu.com/p/d35ba2d4c…

参考www.cnblogs.com/cleven/p/12…