我正在开发一个应用程序,可以根据用户的操作显示图像并进行更改。我创建了一个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。
答案 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?