优化UIScrollview以进行分页

时间:2011-02-23 15:25:20

标签: iphone objective-c uiscrollview lazy-loading

继续问我的问题here,我想知道更新viewDidScroll中的UI的方法是否正确。我可以观察到这种方法被多次调用,可能是ui变得紧张和反应迟钝的原因。 如何提高UI的响应能力。 代码如下:

BOOL isScrollingDown = verticalScrollView.contentOffset.y > _previousContentOffsetY;

_previousContentOffsetY = verticalScrollView.contentOffset.y;

CGFloat pageHeight = verticalScrollView.frame.size.height;

int scrollingToPageNum = isScrollingDown ? (ceil((verticalScrollView.contentOffset.y - pageHeight) / pageHeight) + 1) : (floor((verticalScrollView.contentOffset.y - pageHeight) / pageHeight) + 1);
int page = floor((verticalScrollView.contentOffset.y - pageHeight / 2) / pageHeight) + 1;

[self loadPage:(page-1)];
[self loadPage:(page)];
[self loadPage:(page+1)];

/* Unloading the pages not seen in the view is done here*/
if (!(isScrollingDown) && scrollingToPageNum >1) {
    [self unloadPages:page-2];
}else {
    [self unloadPages:page+2];
}

延迟加载技术工作正常,并且由于它而减少了大量内存使用。但是UI太慢了。此外,我想知道如何从一个从URL下载图像的不同线程更新UI。

TIA, 普利文

1 个答案:

答案 0 :(得分:0)

我不是百分之百确定这个如此仔细检查。如果您使用Apple的类(如UIScrollView),则必须更新应用程序主线程中的屏幕。但是,您无需在同一个线程中下载图像。阅读Apple的并发指南并查看示例程序以了解具体方法。

此外,绘制比他们需要的图像更长的图像需要更长的时间。不要绘制具有比视图中的空间更多像素的图像。对于超大图像将它们分开以便您一次只绘制部分,Apple就为此提供了示例代码。当您检测到停机时间时,会立即在向用户显示的内容周围绘制一些图像。因此,当在视图中滚动时,用户看不到加载符号。只有iPhone 3GS可以处理的iPhone 3GS才能处理这款手机速度越来越慢的因素,因为它需要更多的东西来管理这些手机的速度与保真度,如果用户快速移动,则会绘制低保真图像然后,如果用户停止移动,则绘制更高保真度的图像。

如果我有时间使用某些链接,我会稍后更新,但上述提示对我有用。