2011-11-25 186 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