提高简单动画的平滑度

时间:2009-03-01 22:08:01

标签: iphone animation

我正在开发我的第一个iPhone应用程序,我已经通过了“机器”,现在我正在完成整合完成细节。

我有一个视图,从我的设置窗格的屏幕底部滑入。视图本身的不透明度为0,并且内部有一个UIImageView视图,其中PNG在控件后面创建视图的实际背景。我正在使用UIView的内置动画调用,如;

[self.view addSubview:settingsViewController.view];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

frame.origin.y = 200.0;
settingsViewController.view.frame = frame;

[UIView commitAnimations];

不幸的是,设备上的动画不稳定。我用作背景的PNG只在其宽度的最上面30个像素中是透明的。如果我使用没有透明度的PNG,动画就会很流畅。

应用程序本身是高度图形化的,因此视图可以在充满其他PNG的屏幕上进行动画制作。

如果设备无法顺利处理这种类型的动画,我会非常惊讶,这让我相信我需要改进我的方法。到目前为止我的想法包括;

也许我需要直接使用Core Animation?在制作动画之前缓存设置窗格后面的视图是否有益?

这对我来说是一个新的领域,我知道必须有优化的方法被认为是良好的做法。谢谢你的时间!

2 个答案:

答案 0 :(得分:2)

如果您“直接”使用核心动画或为中心属性设置动画,则无关紧要:它是不稳定的,因为图形硬件必须将透明图像与动画的每一帧上的背景合成。你自己说过使用完全不透明的PNG可以使动画流畅。

尝试在“工具”下运行应用程序,核心动画工具有一些复选框,可以实时突出显示合成区域,这可能会为您提供有关重新绘制图形的一些提示。

如果只有前30个像素需要透明,则可能值得将背景分成两个视图,顶部是一个30像素的条带(透明),其余的是(不透明的)。如果它每帧合成整个视图,那么这个改变可能足以让它知道它只需要合成顶部的30个像素。

答案 1 :(得分:1)

我在过去动画框架时遇到了一些问题,请尝试设置动画中心属性。

另外,您需要在背景图片中获得透明度?您是不是可以将该图像用作包含视图的背景并消除对UIImageView的需求?