【问题标题】:Playing looping images sequence in UIView在 UIView 中播放循环图像序列
【发布时间】:2012-02-17 15:23:41
【问题描述】:

我有一个包含 120 帧、512x512 分辨率、保存为 32 位 PNG 文件的循环动画。我想在我的应用程序内的 UIView 中播放这个序列。谁能给我一些关于如何做到这一点的指示,希望我可以使用标准 API(我更喜欢)来做到这一点。如果需要,我可以使用 Cocos2D 甚至 OpenGL(但此时我对 OpenGL 完全陌生)。

【问题讨论】:

  • 将其转换为视频,然后播放该视频。

标签: iphone objective-c


【解决方案1】:

你可以试试这个:

// Init an UIImageView
UIImageView *imageView = [[UIImageView alloc] initWithFrame:/*Some frame*/];

// Init an array with UIImage objects
NSArray *array = [NSArray arrayWithObjects: [UIImage imageNamed:@"image1.png"], [UIImage imageNamed:@"image2.png"], .. ,nil];

// Set the UIImage's animationImages property
imageView.animationImages = array;

// Set the time interval
imageView.animationDuration = /* Number of images x 1/30 gets you 30FPS */;

// Set repeat count 
imageView.animationRepeatCount = 0; /* 0 means infinite */

// Start animating
[imageView startAnimating];

// Add as subview
[self.view addSubview:imageView];

这是最简单的方法,但我不能说性能,因为我没有尝试过。我认为您拥有的图像应该没问题。

【讨论】:

  • 我认为您在尝试创建图像数组时会耗尽内存。
  • 出于好奇,我做了一个小项目。我使用了 120 个 PNG,每个都是 512x512 像素,大小约为 790KB,所以总共 95MB。加载需要一些时间,但运行得很好。在 4.3 模拟器、5.0 模拟器和 iPhone 4S 上进行了尝试。模拟器甚至没有显示内存警告。
  • 在(例如)相对不受阻碍的 4S 上进行测试与臃肿的 4 相比是不一样的;我的几个客户的记忆问题比我以往任何时候都严重。在提交此类解决方案之前,我建议您在最低的目标设备上进行尝试;例如,3G 手机和 2G 触摸屏只有 128MB 的 RAM,而对于 256MB 的新设备(3GS 手机、4G 触摸屏)来说,大约 95MB 的内存消耗也很大。
  • 这种方法在设备上运行时会崩溃。您根本无法将那么多图像解码到内存中。
【解决方案2】:

未压缩,大约有 90MB 的图像,如果将它们解压缩为 UIImage 格式,这可能与您看到的一样多。由于动画的长度和图像的大小,我强烈建议将它们存储为压缩的电影格式。查看MediaPlayer 框架的参考资料;您可以删除播放控件,在您自己的视图层次结构中嵌入MPMoviePlayerController,并将播放设置为循环。请注意,640x480 是 H.264 支持的上限,因此您可能仍需要按比例缩小视频。

请注意循环播放视频的问题,如Smooth video looping in iOS 问题中所述。

【讨论】:

  • 是的,但如果他要经历转换成电影的麻烦,实现MPMoviePlayer 并可能缩小电影,他可以首先尝试将图像缩小到精确需要大小和/或压缩它们,编写七行代码,看看会发生什么;)
  • @iska:同意,值得测试一个简单的解决方案;请参阅我对您的回答的注释。
猜你喜欢
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2020-08-20
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
相关资源
最近更新 更多