gpt4 book ai didi

ios - 对大型 UIImageView 进行动画转换时性能不佳

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:19 26 4
gpt4 key购买 nike

我正在为我们的游戏构建一个标题序列,其中每个标题都是一个大约一半屏幕大小的视网膜图像,我正在使用 UIImageView 显示它。

标题序列在逐渐增长和淡入/淡出时有简单的 3 个阶段:

// 1. Fade in and grow
[UIView animateWithDuration:1.0f animations:^{
titleImageView.alpha = 1.0f;
titleImageView.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
} completion:^(BOOL finished) {

// 2. Stay opaque, grow a little more
[UIView animateWithDuration:2.0f animations:^{
titleImageView.transform = CGAffineTransformMakeScale(1.1f, 1.1f);
} completion:^(BOOL finished) {

// 3. Fade out, grow even further
[UIView animateWithDuration:2.0f animations:^{
titleImageView.alpha = 0.0f;
titleImageView.transform = CGAffineTransformMakeScale(1.3f, 1.3f);
} completion:nil];

}];

}];

在每个动画阶段的开始,有一两帧被丢弃时会出现断断续续的情况。它在 iPhone 4 和 iPad 3 等较旧的硬件上尤为明显,但在 iPad Air 上什至很明显,这令人惊讶。

一些扣除:

  • 这与 UIImage 本身的加载无关,因为我已尝试预加载数据并确保 PNG 已解压缩。此外,卡顿发生在动画的每个阶段,即使它已经在屏幕上显示了一段时间。
  • 我使用了 Time Profiler 工具并注意到 CA 似乎在每次卡顿时都在后台复制 PNG 数据,尽管我不确定为什么/为什么。每次 transform 更改时,CALayers 肯定不需要在 CPU 上重新创建任何图像数据吗?
  • 编辑:另请注意,我在没有动画的情况下进行了尝试(只是设置了那些转换属性,也没有更改 alpha),并得到了相同的结果。

另请注意,我在后台运行了一些 OpenGL ES 图形(这是一款在前台使用 UIKit 控件的游戏),但这在过去并未造成问题...

最佳答案

所以,它有点难看,但我同时用两种方法解决了它:

  1. 我将层叠的 UIView 动画转换为单个 CALayer keyframed animation这样它们是连续的,而不是在每个阶段都停止,调用完成处理程序,然后开始一个新的动画。正如 Brian Nickel 指出的那样,也许这会阻止他们“定居”并重新渲染他们的新规模。
  2. 但这并没有阻止第一次卡顿,因为它显示了每个新的 UIImage。为了解决这个问题,我预先创建了所有 UIImageView(总共 6 个),将它们添加到 super View ,并将它们的 alpha 设置为零。图片不是很大,也不是太多,所以这看起来还可以。

关于ios - 对大型 UIImageView 进行动画转换时性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998481/

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