2011-02-23 48 views
0

继续我的问题问here,我想知道如何更新viewDidScroll中的用户界面的方法是正确的。我可以观察到这种方法被称为很多次,可能可能是ui变得紧张和反应迟钝的原因。 如何增加UI的响应度。 的代码如下:优化UIScrollview寻呼

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, 普利文

回答

0

我不是100%确定这所以仔细检查。如果您使用Apple的UIScrollView类,则必须更新应用程序主线程中的屏幕。但是,您不需要在同一个线程中下载图像。阅读Apple的“并发指南”并查看示例程序以了解如何实现。

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

我会稍后更新,如果我有时间与一些链接,但上面的这些技巧是为我工作的。

+0

我使用NSURLConnection来异步下载图像。并且委托方法更新UI。如果图像已经下载,则图像视图直接用数据更新。这些图片是来自YouTube的视频缩略图。当我滚动它时,我无法弄清UI的jitterniess。我想滚动是完全自由流动,不慢。随时问我你可能想知道的有关我的实施的任何问题。 – 2011-02-23 18:22:42

+0

问题:你使用什么设备?它的iOS版本是什么?你使用的是什么版本的SDK?你正在下载的图像的尺寸是多少?图像的格式是什么?每张图片有多少个像素?我可以下载并查看您的项目吗?我可能会发现其他事情吗? – Tobias 2011-03-01 21:27:34

+0

@ Gaspy1909 - 对不起,延迟回复。我正在使用iPod 2g,以便在新设备上更好地工作。它有最新的ios 4.2。 SDK也是最新的应用开发网站。每个图像大小约为150x95,作为uiview的一部分放置在uiimageview中。 – 2011-03-07 05:42:25