动画在iPhone上很慢

时间:2010-05-06 07:13:41

标签: iphone performance animation

我正在开发一个应用程序,可以根据用户的操作显示图像并进行更改。我创建了一个UIView的子类来包含一个图像,一个索引号和一个图像名称数组。代码是这样的:

@interface CustomPic : UIView {
    UIImageView *pic;
    NSInteger index;
    NSMutableArray *picNames;  //<-- an array of NSString
}

在实现部分,它有一种使用溶解效果来改变图像的方法。

- (void)nextPic {
    index++;
    if (index >= [picNames count]) {
    index = 0;
    }
    UIImageView *temp = pic;
    pic.image = [UIImage imageNamed:[picNames objectAtIndex:index]];
    temp.alpha = 0;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [UIView setAnimationDuration:0.25];
    pic.alpha = 0;
    temp.alpha = 1;
    [UIView commitAnimations];
}

在viewController中,有几个CustomPic会根据用户的选择更改图像。图像会随着淡入/淡出效果的变化而变化,但动画效果非常糟糕。我在iPhone 3G上测试过,仪器显示动画只有2-3FPS!我尝试了很多方法来简化和修改代码,但没有希望。我的代码或我的概念中有什么问题吗?谢谢你的帮助。

P.S。所有图像都是320 * 480 PNG,最大尺寸为15KB。

4 个答案:

答案 0 :(得分:1)

您是否正在运行iPhone OS 4测试版?我发现测试版操作系统在iphone 3g

等老一代设备上要慢得多

答案 1 :(得分:1)

在该代码段中,您只使用一个UIImageView:

UIImageView *temp = pic;

所以这条线什么都不做:

pic.alpha = 0;

要淡入一张图像和另一张图像,您需要两个UIImageView实例。

为了加快速度,您可能需要提前加载下一张图像。设置动画的委托,并在完成加载时将在下次调用nextPic时显示的图像。

编辑:

如果图像不透明,请尝试设置pic.opaque = YES;,以便视图可以忽略基础视图。如果这不是一个选项,请尝试在淡入淡出视图和全屏不透明视图之间尽可能少的视图。在淡入淡出的每个步骤中,视图必须与每个基础视图合成,直到找到不透明视图。

如果在淡入淡出下有许多透明视图,请考虑将它们全部临时合成,相当于在photoshop中展平图层,并在开始淡入淡出之前将合成图像作为图像放在全屏不透明视图中。它可能会延迟开始淡入淡出,但淡化本身应该更平滑。

答案 2 :(得分:1)

尝试更改

[UIView setAnimationDuration:0.25];

[UIView setAnimationDuration:0.025];

看看你是否正在寻找......

答案 3 :(得分:0)

动画持续时间为.25秒,可以保证得到&lt; 4 FPS。您要定位什么FPS?