【发布时间】:2013-09-26 03:11:20
【问题描述】:
我一直在开发一款 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设置回1.0,然后使用 1.0 alpha 进行反向动画,不会产生平滑的反向动画。
不透明度修复
我之前使用过不透明度修复来使动画在缩放和平移多个图像时变得平滑。例如,我有两个大图像以不同的速度平移和缩放,一个在另一个之上。当下部图像(底部的图像)之前未渲染的部分变得可见时,动画将变得不稳定(平移和缩放)。我对为什么alpha 在这种情况下有帮助的想法是,如果顶部图像有一点透明度,则必须始终渲染底部图像,这意味着它可以在动画发生之前被缓存。这个想法是通过做反向动画而不是看到生涩的动画来支持的。 (我想我很想知道是否有人对此也有不同的想法)。
如上所述,我不知道当只有一张图片时这会产生什么影响(就像我在问题中描述的情况一样)。尤其是得到了生涩的动画后,反向动画还是生涩的。这两种情况的另一个不同点是,在当前问题中,只有缩放导致问题,而在双图像问题中,它是平移以及缩放。
我希望以上内容很清楚 - 任何见解都值得赞赏。
【问题讨论】:
-
你的平底锅和秤怎么样?更改框架+重绘或应用变换?是否涉及阴影或遮蔽(如圆角)?如果你运行Core Animation Instrument,这两种方式在离屏渲染、缓存未命中等方面有什么区别吗?
-
UIViewGroupOpacity 现在在 iOS 7 中默认为 YES。这可能会触发动画中的额外工作。尝试在 Info.plist 中将其设置为 NO 并查看动画是否与 iOS 6 中的效果相似
-
@iccir - 感谢您的建议:试一试,但没有改变。明天我会尝试大卫的建议(这需要更多时间)。干杯
标签: objective-c ipad ios6 core-animation ios7