我一直在开发一个 iPad 应用程序,该应用程序在非常大的图像上执行动画(全屏图像可以缩放 2 倍并且仍然是视网膜质量)。我花了很多时间在缩放和平移时获得平滑的过渡。然而,在运行应用程序iOS7
时,动画变得非常生涩(帧速率慢)。
进一步测试表明是缩放动画导致了问题(平移不会导致问题)。有趣的是,我已经能够通过将alpha
要缩放的图像的 设置为0.995
(而不是1.0
)来修复它。
我有两个问题
- 发生了什么变化
iOS7
? - 为什么改变视图的不透明度会产生影响?
上述问题的更多信息:
动画设置
动画都是预定义的,并在用户交互时播放。动画都是平移和缩放的混合体。动画非常简单:
[UIView animateWithDuration:animationDuration delay:animationDelay options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.frame = nextFrame;
//...
} completion:^(BOOL finished) {
//...
}];
为了修复生涩的动画,我alpha
在动画之前设置了
self.alpha = 0.99;
一些有趣的观点:
- 设置
alpha
动画的内部也可以 - 将
alpha
back 设置为1.0
after 动画,然后使用 1.0 alpha 执行反向动画不会提供平滑的反向动画。
不透明度修复
我以前使用不透明度修复来使动画在缩放和平移多个图像时变得平滑。例如,我有两个大图像以不同的速度平移和缩放,一个在另一个之上。当下部图像(底部的图像)之前未渲染的部分变得可见时,动画将变得不稳定(平移和缩放)。我对为什么alpha
在这种情况下有帮助的想法是,如果顶部图像有一点透明度,则必须始终渲染底部图像,这意味着它可以在动画发生之前被缓存。这个想法是通过做反向动画而不是看到生涩的动画来支持的。(我想我很想知道是否有人对此也有不同的想法)。
如上所述,我不知道当只有一张图像时这会产生什么影响(就像我在问题中描述的情况一样)。尤其是得到了生涩的动画后,反向动画还是生涩的。这两种情况的另一个不同点是,在当前问题中只有缩放会导致问题,而在双图像问题中,它是平移和缩放。
我希望以上内容很清楚 - 任何见解都值得赞赏。