2011-11-25 141 views
1

我最近遇到了动态(惰性)加载图像在UIScrollView中放置的元素(UIViewController-Subclasses)中的问题。动态加载图像

的现状如下:

  • 与其bookcovers大量书籍需要显示在水平滚动的滚动视图
  • 由于存储器约束我回收book元素;当一个didScroll-Delegate方法被调用时,我使用一套30本书实例并在UIScrollView中重新设置它们的位置。
  • 当重新设置书元素的框架时,它也将被更新为新内容(新书信息)
  • 当更新书籍元素时,书籍封面图像淡出,开始一个线程从Web加载图像,一旦完成,将图像设置为UIImageViewController的图像属性。

到目前为止好,延迟加载的伟大工程,以及再利用我的书元素的作品,以及...

的问题是,异步加载图像将只显示一次UIScrollview完成了它的滚动动画。

我已经试过像setNeedsDisplay(一旦图像finisehd加载)的东西。但它并没有真正帮助在所有...

我hoope你们对我有一些建议....

感谢, SAM

回答

2

您必须设置NSURLConnection的调用它主运行循环上的delagate,以便可以更新UI。退房NSURLConnection class reference并搜索:

- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode 

代码应该是这样的:

urlConn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; 

[urlConn scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 

[urlConn start]; 

设置连接运行循环模式NSRunLoopCommonModes时,取图像给人的委托来更新UI,而能力主运行循环处于UI事件跟踪模式,例如当一个tableview或滚动视图正在滚动。

+0

太棒了,非常感谢!拉法尔 – samsam

+0

没问题。干杯! ;) – RaffAl

0

您是否使用网络框架工作?

如果不是,我会建议使用AFNetworking。请参见下面的代码:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)]; 
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]]; 

在这里看到:

AFNetworking

+0

不,我写了我自己的async-imageview子类... Rafal的答案工作得很好..谢谢你的回答! – samsam