Iphone 核心动画和视图旋转的性能不佳:如何改进?

Iphone 核心动画和视图旋转的性能不佳:如何改进?,iphone,cocoa-touch,uikit,core-animation,transform,Iphone,Cocoa Touch,Uikit,Core Animation,Transform,我有12个视图,在进入主屏幕自定义模式时,我通过触摸图标几秒钟来旋转它们,几乎与主屏幕中的图标相似 我使用3D转换代码进行旋转。它们各自的持续时间仅为0.02秒,在加速度测量时,旋转角度和方向会永久改变 其中5个视图可以,但12个视图的性能非常差。这是轮换代码: CATransform3D rotatedTransform = CATransform3DRotate(CATransform3DIdentity, degrees * M_PI / 180.0, 0.0f, 0.0f, 1.0f);

我有12个视图,在进入主屏幕自定义模式时,我通过触摸图标几秒钟来旋转它们,几乎与主屏幕中的图标相似

我使用3D转换代码进行旋转。它们各自的持续时间仅为0.02秒,在加速度测量时,旋转角度和方向会永久改变

其中5个视图可以,但12个视图的性能非常差。这是轮换代码:

CATransform3D rotatedTransform = CATransform3DRotate(CATransform3DIdentity, degrees * M_PI / 180.0, 0.0f, 0.0f, 1.0f);
self.layer.transform = rotatedTransform;
有一些核心动画围绕着它。但我看到了CPU的浪费,因为我不做任何3D的东西。我真的只旋转2D,其他什么都没有。它们是简单的UIImageViews,但是一个自定义类,可以自己执行旋转动画

我听说有一些“仿射”变换应该适用于二维空间。在这种情况下,您是否建议将其更改为2D

我必须更改图层或视图的变换吗?哪个更快

我的建议是使用OpenGLES。
尽管核心动画比“UITransformations”更为快速,但您面临的问题是一个经典问题:您正试图创建基于帧到帧的动作,其中有大量“虚拟”精灵漂浮在周围。这不是UIKit的用途。尤其是你想要做的动画。旋转需要三角学来计算像素插值。那是一个相当昂贵的程序

除非对动画的强度、同时动画对象的数量以及重新计算新变换的频率有明确的限制,此时我给您的唯一建议是OpenGL ES

到目前为止,我对iPhone的体验非常相似。每次我们启动应用程序时,当前的平台都无法处理它。我们最终使用了OpenGL ES,值得学习性能令人难以置信

我为“坏消息”感到抱歉,但我强烈建议不要在基于帧到帧的应用程序中使用UIKit和核心动画

我的建议是使用OpenGL ES。
尽管核心动画比“UITransformations”更为快速,但您面临的问题是一个经典问题:您正试图创建基于帧到帧的动作,其中有大量“虚拟”精灵漂浮在周围。这不是UIKit的用途。尤其是你想要做的动画。旋转需要三角学来计算像素插值。那是一个相当昂贵的程序

除非对动画的强度、同时动画对象的数量以及重新计算新变换的频率有明确的限制,此时我给您的唯一建议是OpenGL ES

到目前为止,我对iPhone的体验非常相似。每次我们启动应用程序时,当前的平台都无法处理它。我们最终使用了OpenGL ES,值得学习性能令人难以置信


我为“坏消息”感到抱歉,但我强烈建议不要在基于帧到帧的应用程序中使用UIKit和核心动画

听起来像是您不断地重新绘制视图。我确信有一种方法可以禁用此功能,并且只在动画结束时重新绘制。

听起来像是您不断地重新绘制视图。我相信有一种方法可以禁用此功能,并且只在动画结束时重新绘制

  • 用鲨鱼咬住它。你必须知道到底什么东西慢了才能继续

  • 尝试将更新间隔从0.02秒增加到0.1秒;可以接受吗

  • 如果所有图像一起旋转,请在上层使用
    子层变换
    ,而不是单独变换每个图像

  • 在不关闭动画的情况下尝试,只是为了确认回调是否按预期工作(setDisableActions:on CatTransaction)。当你把鲨鱼脱掉的时候,你是否也看到了同样的事情

  • 如果在滚动视图中执行此操作,则可能存在其他问题。你需要处理屏幕上/屏幕下的事情,等等

  • 3d变换的速度与核心动画AFAIK中的仿射变换的速度相同。基本的罪恶感并没有减缓应用程序的速度

  • 关于您试图实现的实际效果的更多信息将真正有助于提高性能

    屏幕上的图像有多大

  • 用鲨鱼咬住它。你必须知道到底什么东西慢了才能继续

  • 尝试将更新间隔从0.02秒增加到0.1秒;可以接受吗

  • 如果所有图像一起旋转,请在上层使用
    子层变换
    ,而不是单独变换每个图像

  • 在不关闭动画的情况下尝试,只是为了确认回调是否按预期工作(setDisableActions:on CatTransaction)。当你把鲨鱼脱掉的时候,你是否也看到了同样的事情

  • 如果在滚动视图中执行此操作,则可能存在其他问题。你需要处理屏幕上/屏幕下的事情,等等

  • 3d变换的速度与核心动画AFAIK中的仿射变换的速度相同。基本的罪恶感并没有减缓应用程序的速度

  • 关于您试图实现的实际效果的更多信息将真正有助于提高性能


    图像在屏幕上有多大?

    CALayer旋转是硬件加速的,2D和3D转换非常相似,没有重画,不需要转到opengl,不需要缓存

    Shark会有所帮助,但您需要知道您在寻找什么,并且您所寻找的不是改进当前代码的性能,而是