我正在使用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,但让我们指定要播放的图像文件名数组,而不必事先加载所有图像。

10-08 16:59