gpt4 book ai didi

ios - `animateKeyframesWithDuration` - 高 GPU

转载 作者:行者123 更新时间:2023-11-29 12:03:23 27 4
gpt4 key购买 nike

我添加了一个连续运行的相对简单的动画。这用于短暂切换到另一个 View 几秒钟。

当动画运行时,iPhone 6 (iOS 9.2.1) 上的 GPU 从 <5% 跃升至恒定的 30-40%,而模拟器上的“能量影响”(事件监视器)则一路上升.请注意,实际动画只占用一小部分时间(底部代码),但 GPU 始终保持高电平。为动画 View 设置不透明背景并不能改善情况。

虽然动画看起来很流畅,但这看起来很奇怪,所以我想知道我是否遗漏了什么或做错了什么,或者是否有一些关于 animateKeyframesWithDuration 方法的已知错误。

下面是导致同样高 GPU 消耗的简化代码示例:

v1.alpha = 0;
[UIView animateKeyframesWithDuration:10 delay:0
options:UIViewKeyframeAnimationOptionAutoreverse | UIViewKeyframeAnimationOptionRepeat | UIViewKeyframeAnimationOptionCalculationModeLinear
animations:^
{
[UIView addKeyframeWithRelativeStartTime:0.9/10 relativeDuration:0.1/10 animations:^{
v2.alpha = 0;
v1.alpha = 1;
}];
} completion:nil];

谢谢。

编辑以添加一些注释:

  1. 动画不会闲置,即使没有为动画的特定时间部分设置动画指令(例如,只为总动画时间的 1/10 添加 addKeyframeWithRelativeStartTime ).
    因此,animateKeyframesWithDuration: 可能不是具有“空闲”时间的动画的最佳解决方案(如上面的代码示例中所示)- 可以通过使用计时器来实现更好的性能,例如,它开始需要时的实际动画。

  2. 作为动画一部分的所有层都将在整个时间中进行动画处理(在上面的示例中,v1.layer 和 v2.layer)- 同样,如果给定的时间部分没有特定的指令集,它将获胜不要闲置(它将继续重绘和消耗 GPU,除非它不再可见)。

  3. 性能方面,与其他CoreAnimation动画不相上下。
    动画的绘制代码似乎仅在内部处理 - 来自 UIViewCALayer 的绘制方法在动画期间未被调用。这使得任何 View 的动画都将具有相似的性能结果(例如,绘制完整矩形的 View /层不会比 UILabel 或更复杂的 View /层性能更高)。

编辑 2:

在 iOS 10(以及 Mac OS Sierra)上,动画占用的资源要少得多。

最佳答案

动画在后台线程上执行,并由特殊进程(“动画服务器”)在 GPU 上逐帧管理。持续时间在这里没有意义;你被设置为永远重复,所以动画服务器必须永远执行动画。正如您所发现的那样,这不是免费的。每一帧都是一个新的计算和一个新的绘图。这需要工作。动画服务器并不会因为它已经完成了一次“相同”的动画而变得更容易做到这一点。 (iPhone 不是某种神奇的永动机!)

关于ios - `animateKeyframesWithDuration` - 高 GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35992936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com