1

我正在用 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
{

}

我只是试图将“视图”更改为我的屏幕外视图之一。但这似乎不起作用。轮播显示空白屏幕。

怎么了 ?

谢谢

4

1 回答 1

3

ReusingView 旨在通过回收视图来减少分配/释放视图的需要。但是因为您将所有视图存储在一个数组中,所以它对您没有帮助,因为它们都是一次创建的,并且无论如何都不会发布。

从根本上说,问题在于您试图一次将太多图像加载到内存中(视图数 x 每个视图的动画帧数)。

您需要找到一种动态加载帧的方法。试试我的 GLView 库 (https://github.com/nicklockwood/GLView),其中包含使用可以实时加载的 PVR 图像播放动画的说明。GLView 库包含一个 GLImageView 类,它的工作方式与 UIImageView 类似,但您可以指定要播放的图像文件名数组,而不必提前加载所有图像。

于 2012-10-21T08:04:51.930 回答