我正在使用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
{
}
我只是试图将“视图”更改为我的屏幕外视图之一。但这似乎不起作用。轮播显示空白屏幕。
怎么了 ?
谢谢
最佳答案
ReusingView旨在通过回收视图来减少分配/取消分配视图的需求。但是,由于将所有视图存储在一个数组中,因此这将无济于事,因为它们都是一次创建的,无论如何都不会释放。
从根本上讲,问题是您试图一次将太多图像加载到内存中(视图数x每个视图的动画帧数)。
您需要找到一种动态加载框架的方法。试试我的GLView库(https://github.com/nicklockwood/GLView),其中包括使用PVR图像播放动画的说明,该图像可以实时加载。 GLView库包含一个GLImageView类,其作用类似于UIImageView,但让我们指定要播放的图像文件名数组,而不必事先加载所有图像。