美文网首页
iOS中改善动画效果

iOS中改善动画效果

作者: 浪呀么浪打浪 | 来源:发表于2020-07-08 20:27 被阅读0次

    核心动画是提高基于应用程序的动画的帧速率的一种好方法,但不能保证性能得到改善。特别是在OS X中,您仍然必须选择使用Core Animation行为的最有效方法。与所有与性能相关的问题一样,您应该使用Instruments来衡量和跟踪应用程序的性能,以确保性能在不断提高且不会下降。

    一般提示和技巧

    有几种方法可以使您的图层实现更加高效。但是,与任何此类优化一样,在尝试进行优化之前,应始终测量代码的当前性能。这为您提供了一个基准,可用于确定优化是否有效。

    尽可能使用不透明层

    opaque图层的属性设置为YES让Core Animation知道它不需要为图层维护Alpha通道。没有Alpha通道意味着合成器不需要将图层的内容与其背景内容混合在一起,从而节省了渲染时间。但是,此属性主要与作为图层支持视图一部分的图层或Core Animation创建基础图层位图的情况有关。如果直接将图像分配给图层的contents属性,则无论该opaque属性的值如何,都将保留该图像的Alpha通道。

    为CAShapeLayer对象使用更简单的路径

    CAShapeLayer类创建通过在合成时使你提供为位图图像路径的内容。优点是该层始终以最佳分辨率绘制路径,但是该优点是以增加渲染时间为代价的。如果您提供的路径很复杂,则光栅化该路径可能会变得过于昂贵。而且,如果层的大小频繁更改(因此必须频繁重绘),则绘制所花费的时间可能加起来并成为性能瓶颈。

    最小化形状图层绘制时间的一种方法是将复杂的形状分解为更简单的形状。CAShapeLayer在合成器中使用更简单的路径并将多个对象彼此叠加可以比绘制一条大的复杂路径快得多。这是因为绘制操作发生在CPU上,而合成发生在GPU上。但是,与这种性质的任何简化一样,潜在的性能提升取决于您的内容。因此,在优化之前测量代码的性能尤其重要,这样您就可以将基线用于比较。

    明确设置相同图层的图层内容

    如果要在多个图层对象中使用同一图像,请自行加载该图像并将其直接分配给contents这些图层对象的属性。向contents属性分配图像可防止该层为后备存储分配内存。而是,图层使用您提供的图像作为后备存储。当多个层使用同一图像时,这意味着所有这些层都共享相同的内存,而不是为其自己分配图像的副本。

    始终将图层大小设置为整数值

    为了获得最佳结果,请始终将图层对象的宽度和高度设置为整数值。尽管您使用浮点数指定了图层边界的宽度和高度,但最终还是使用图层边界来创建位图图像。指定宽度和高度的整数值可简化Core Animation创建和管理后备存储以及其他图层信息所必须完成的工作。

    根据需要使用异步层渲染

    您在委托的drawLayer:inContext:方法或视图的drawRect:方法中所做的任何绘图通常都在应用程序的主线程上同步发生。但是,在某些情况下,同步绘制内容可能无法提供最佳性能。如果发现动画效果不佳,则可以尝试drawsAsynchronously在图层上启用该属性,以将这些操作移至后台线程。如果这样做,请确保绘图代码是线程安全的。与往常一样,您应该始终在将其放入生产代码之前异步测量绘图的性能。

    在图层上添加阴影时指定阴影路径

    让Core Animation确定阴影的形状可能会很昂贵,并且会影响应用程序的性能。与其让Core Animation确定阴影的形状,不如使用的shadowPath属性显式指定阴影形状CALayer。当您为此属性指定路径对象时,Core Animation将使用该形状绘制并缓存阴影效果。对于形状从未改变或很少改变的图层,这可以通过减少Core Animation完成的渲染量来大大提高性能。

    相关文章

      网友评论

          本文标题:iOS中改善动画效果

          本文链接:https://www.haomeiwen.com/subject/dksgnctx.html