在我的应用程序中,我使用滚动视图显示 300 张图像 (400 kB)。这需要将近 2 分钟,结果,当我上下滚动时,它并不流畅。
我怎么解决这个问题?
注意:我注意到在我向下滚动到滚动视图的末尾一次后,它变得平滑。滚动问题仅在第一次出现。
在我的应用程序中,我使用滚动视图显示 300 张图像 (400 kB)。这需要将近 2 分钟,结果,当我上下滚动时,它并不流畅。
我怎么解决这个问题?
注意:我注意到在我向下滚动到滚动视图的末尾一次后,它变得平滑。滚动问题仅在第一次出现。
不要预先加载所有图像。只需加载当前要显示的图像和下一张+最后一张图片。
据我了解,您在加载/显示滚动视图时加载所有图像。由于您有很多图像,因此如果您仅在内存中加载/拥有三个图像,它将更快并节省更多内存。这将是上一个/左显示的图像并且不可见 - 当前显示和可见的图像以及下一个/右图像不可见。
因此,如果您向左移动/滑动,您基本上将滚动视图向左移动并显示已加载的右侧图像。在后台,您将加载下一个右侧图像,同时释放最左侧的图像。
在任何时候,您最多只能加载 4 张图像。
看看 WWDC 2011 的无限滚动视图示例 - 会话 104 高级滚动视图以获得良好的视觉示例和示例代码。
尝试将其添加到您的加载函数(加载图像的位置)中。如果您使用 while 或 for 循环来加载图像,请将此代码添加到循环中。
NSURL *url=//here url for your image
dispatch_queue_t currentQueue = dispatch_get_current_queue();
dispatch_queue_t dataConvertorQueue = dispatch_queue_create("Fetching images", NULL);
dispatch_async(dataConvertorQueue, ^{
NSData *data = [NSData dataWithContentsOfURL:url];
dispatch_async(currentQueue, ^{
//replace imageView with your imageView outlet
imageView.image = [[UIImage alloc] initWithData:data]];
});
});
dispatch_release(dataConvertorQueue);
此代码可帮助您从 url 获取和显示图像,并且它适用于 tableview。它可能不是你想要的,但它会给你一个关于如何去做的想法。希望它会帮助你。
我认为这将解决您的问题。这个问题可能会给你一些背景信息: