我正在使用 aCATransition
来洗牌CALayer
(UIView
不是UIView
全屏)。新图层从右侧进入,旧图层从左侧离开。的CAlayer
内容属性设置为CGImageRef
s。这是我认为相关的代码:
CATransition *transition = [CATransition animation];
transition.duration = transitionTime;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
transition.delegate = self;
[view.layer addAnimation:transition forKey:nil];
// onDeck is the layer stage-right and is about to enter
[view.layer addSublayer:onDeck];
// onStage is the layer currently in the middle of the view and is exiting
if (onStage)
[onStage removeFromSuperlayer];
这个动画出现了,有 1 秒的暂停,然后一个新的图像被动画化,等等。这在模拟器中效果很好,但在我的第二代 iPod Touch 上,动画中偶尔会出现打嗝。具体来说,动画所在的图层将在当前显示的图层上方闪烁。这些闪烁不一致但很明显。
我缩小范围认为可能的罪魁祸首是我在此过渡背后进行的背景动画。有几十个CAlayer
在背景中飞入和飞出全屏视图。当我删除这些背景动画或将过渡的动画持续时间设置为更长的持续时间(2 秒 +)时,动画效果很好(我希望动画时间为 0.75 秒。)
我的第一个想法(似乎得到上述观察结果的支持)是我将 CoreAnimation(至少对于我的 iPod)推得太猛了,需要妥协。为什么我无法接受这一点是除了偶尔的闪烁之外,场景渲染得非常好(几乎没有延迟)。
如果有人对此问题或一般的 CoreAnimation 优化有任何意见,我将非常感激!
谢谢阅读
更新:
有机会在 iPhone 4 上对此进行测试,并且从未发生过闪烁。此外,CoreAnimation 仪器证实,在我的第 2 代 iPod Touch 上,我的 FPS 始终保持在 40 秒到 50 秒左右。