3

我正在使用 aCATransition来洗牌CALayerUIView不是UIView全屏)。新图层从右侧进入,旧图层从左侧离开。的CAlayer内容属性设置为CGImageRefs。这是我认为相关的代码:

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 秒左右。

4

2 回答 2

0

我会摆脱所有阴影(如果有的话),然后检查性能是否有所提高。我已经看到阴影,尤其是 CAShapeLayers 上的阴影,对动画的平滑度有很大的影响。

于 2011-05-16T23:01:26.383 回答
0

只是一个猜测:您是否尝试过管理您的 CATransactions?

您可以尝试像这样将您对场景的修改括起来:

[ CATransaction begin ]
... your animations ...
[ CATransaction commit ] ;
于 2011-05-17T05:08:39.590 回答