【发布时间】:2012-12-12 22:18:40
【问题描述】:
到目前为止,我正在使用 UIImageView 和 UIImage 数组,这些 UIImage 一个接一个地显示。
此示例中的相同链接:
NSArray *myImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"instruction_1"],
[UIImage imageNamed:@"instruction_2"],
[UIImage imageNamed:@"instruction_3"],
[UIImage imageNamed:@"instruction_2"],
[UIImage imageNamed:@"instruction_1"]
,nil];
UIImageView *butta = [[UIImageView alloc] initWithFrame:frame];
butta.animationImages = myImages;
butta.animationDuration = 1;
butta.animationRepeatCount = 0;
butta.alpha = 0;
[butta startAnimating];
但问题是这个解决方案在图像很小之前都有效......但在我的情况下,它们中的大多数都与设备最大分辨率相同(横向视网膜 ipad 超过 2000 宽度和 1500 高度)......并且它有alpha 通道 (.png) ...会导致性能不佳,尤其是在速度较慢的设备上(甚至在 iPad 3 上)...
你知道有什么好的选择吗?我尝试了 .svg 图形,但效果更差。
如何优化它?
提前感谢您的帮助, 问候大卫
【问题讨论】:
-
将图像制作成视频,将其包含在您的应用程序包中,然后播放
-
你在说多少张图片?数百个,还是只有一只手?
-
在您的具体示例中,至少指令_1 的最后一个条目是多余的。摆脱它。您这样做的方式会导致指令_1 从其第二次出现开始出现两次。 (指令_1 跟随指令_1)
-
如果 UIImage 对象数组使用的存储总量是问题,那么我不会使用动画数组。在那种情况下,我会安排一个 NSTimer (或使用 [self performSelector:withObject:afterDelay] 来触发更改并加载下一个图像。该数组将只包含图像名称而不是完整的 UIImage 对象。这样做你会离开它到可可框架以释放空间或在适当的情况下利用缓存逻辑。
-
视频不是一个选项,因为我有时必须处理这个动画(更改一些帧),如果我不想快速完成,那就麻烦了。
标签: objective-c performance uiimageview uiimage