我正在使用ICarousel构建一个应用程序。 旋转木马将有大约30个项目。 每个项目都是UIImageView显示动画的视图。
现在我只是创建所有30个视图,将它们添加到数组中,并在需要时提供给轮播。
SBTViewController* iv1 = [[SBTViewController alloc] initWithNibName:@"SBTViewController" bundle:nil];
SBTViewController* iv2 = [[SBTViewController alloc] initWithNibName:@"SBTViewController" bundle:nil];
.....
.....
SBTViewController* iv30 = [[SBTViewController alloc] initWithNibName:@"SBTViewController_iPhone" bundle:nil];
viewsarray = [NSArray arrayWithObjects: iv1,iv2... iv30]
当轮播需要更多视图时 - 我只是提供数组中的视图
然而,我开始获得MemoryWarnings。 试图使用'reuseView'选项,但它根本不起作用或我误解了一些东西。 每次调用以下内容时:
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
}
我只是尝试将“视图”更改为我的一个屏幕外视图。但它似乎没有用。旋转木马显示空白屏幕。
有什么问题?
感谢
答案 0 :(得分:2)
ReusingView旨在通过回收它们来减少分配/取消分配视图的需要。但是因为你将所有视图存储在一个数组中,所以它不会对你有所帮助,因为它们都是一次性创建的,而且还没有被释放。
问题基本上是你试图一次将太多图像加载到内存中(视图数量x每个视图的动画帧数)。
您需要找到一种动态加载帧的方法。试试我的GLView库(https://github.com/nicklockwood/GLView),其中包含使用可以实时加载的PVR图像播放动画的说明。 GLView库包含一个GLImageView类,其工作方式与UIImageView类似,但是您可以指定要播放的图像文件名数组,而不必提前加载所有图像。