Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 什么更快?绘画还是合成?_Iphone - Fatal编程技术网

Iphone 什么更快?绘画还是合成?

Iphone 什么更快?绘画还是合成?,iphone,Iphone,我广泛使用-drawRect:来制作一些漂亮的动画。一个计时器尝试每秒使用-setNeedsDisplay启动30次,但感觉只有20次。另外,我不能使用-setNeedsDisplayInRect:因为动画涵盖了整个内容 将这些绘图操作从-drawRect:中取出并移动到子视图中会有帮助吗-drawRect需要做的工作要少一些,但操作系统在合成视图方面需要做更多的工作 有没有经验法则哪一个更糟糕?我记得在苹果的一篇文章中,他们声称核心动画在动画制作过程中不会重画。这就是他们速度的秘诀吗?在动画中

我广泛使用-drawRect:来制作一些漂亮的动画。一个计时器尝试每秒使用-setNeedsDisplay启动30次,但感觉只有20次。另外,我不能使用-setNeedsDisplayInRect:因为动画涵盖了整个内容

将这些绘图操作从-drawRect:中取出并移动到子视图中会有帮助吗-drawRect需要做的工作要少一些,但操作系统在合成视图方面需要做更多的工作


有没有经验法则哪一个更糟糕?我记得在苹果的一篇文章中,他们声称核心动画在动画制作过程中不会重画。这就是他们速度的秘诀吗?在动画中使用子视图?

其中大部分类似于:

到目前为止,合成速度更快。在iPhone上,使用Quartz绘图调用或位图图像将内容绘制到CALayer(或UIView的后台CALayer)中。然后将该层光栅化,并作为OpenGL纹理有效地缓存在GPU上

这种绘制和缓存操作非常昂贵,但一旦层位于GPU上,它就可以以硬件加速的方式四处移动、缩放、旋转等。当图层设置动画时,GPU所要做的就是每帧将其与屏幕上的其他图层合成。这就是为什么即使是最老的iPhone机型,Core动画也可以在屏幕上以60 FPS的速度制作50层动画

图层和视图仅在出现提示时重新绘制自身,或者在其
需要显示边界设置为“是”时重新调整大小。绘图系统是以这种方式设置的,因为重新绘制和重新设置图层内容的成本非常高。如果可以,请避免定期重画层内容,而是将其拆分为可以使用核心动画单独设置动画的层或视图。如果您需要为更改的形状设置动画,请查看CAShapeLayer,这比简单地重画每一帧更有效

最坏的情况是,可以将视图中的静态部分移动到一个视图中,然后创建一个子视图,该子视图中仅包含图形的更改部分。性能不会很好,但会比必须重新绘制视图中的所有内容要好得多。与绘图费用相比,合成开销可以忽略不计