2013-05-21 160 views
2

我有一個應用程序,我在UITableView中加載圖像。每一行都有一個圖像視圖。觸摸時更新視圖

  1. 我從URL下載圖像並將其分配到UIImageView。這裏的問題是,如果我拖動表視圖,圖像視圖不會更新。它只在我釋放手指時更新。

  2. 另一個問題是,我在所有單元格中都有一個標籤,顯示一個使用計時器遞增的計數器。當我的手指在桌子視圖上時,計時器動作也不會被調用。

如何在這兩種情況下進行更新?

可能是這是一個非常基本的問題。但我不知道。

謝謝大家!

編輯:我注意到,-connection:didReceiveResponse:視圖被觸摸時方法不獲取調用。

編輯2:我試着用NSURLConnection添加運行循環。我的方法看起來像這樣。

- (void)start { 

    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:self.imageURL cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:self.timeoutInterval]; 
    [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 
    _connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 

    NSPort* port = [NSPort port]; 
    NSRunLoop* rl = [NSRunLoop currentRunLoop]; // Get the runloop 
    [rl addPort:port forMode:NSRunLoopCommonModes]; 
    [_connection scheduleInRunLoop:rl forMode:NSRunLoopCommonModes]; 
    [_connection start]; 
    [rl run]; 
} 

即使當我觸摸視圖時,也會載入圖像。但桌面視圖滾動速度非常緩慢。它甚至沒有滾動。它只在我拖動時纔會移動。鬆開手指後沒有動作。

+2

您是如何下載圖片的?我想問題是,這些作品在線程上被阻塞,而你爲第一個問題拖動 – Meera

+0

,我更喜歡你使用我開發的擴展'UIImageView'類,你可以在這裏下載[https://github.com/ DipenPanchasara/LazyImageView)我相信它會解決第一個問題,關於第二個我猜,你需要調用更新節方法刷新你的tableView,沒有其他選項。 –

+0

@DipenPanchasara,如果他只想更改一個(或多個)標籤,他爲什麼要調用'ReloadSections'?這種方法不適合。只需更改label.text就足夠了。 – folex

回答

2

問題1

的解決方案是使用下載的機制,同時拖動表格視圖不會被封鎖。 SDWebImage是一個異步圖片下載程序,具有UIImageView類別的緩存支持。這會讓你的圖像視圖更新,即使你拖動你的表。我在使用SDWebImage的項目中面臨同樣的問題。只要打個電話就行。

[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] 
        placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

問題2

如果在主線程跟蹤觸摸其scheduledTimer將不會被調用。做這樣的事情。只需創建一個計時器並添加到迴路

NSTimer* timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES]; 
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 

這不會中斷您的計時器。

+0

非常感謝。我有計時器與NSRunLoop工作。我如何使NSURLConnection工作。我已經注意到,* - 連接:didReceiveResponse:*方法沒有被調用當視圖被觸摸時感謝 – EmptyStack

+0

使用SDWebImage正常NSURLConnection將被阻塞,直到錶停止拖動或者你必須使用另一個線程使用NSOperationQueue檢查這些http:// stavash.wordpress.com/2012/12/14/advanced-issues-asynchronous-uitableviewce ll-content-loading-done-right /,http://stackoverflow.com/questions/12654192/suggestions-on-asynchronous-image-loading-for-uitableview-in-ios – Meera

+0

謝謝。我編輯了我的答案。你能檢查一下嗎?謝謝。 – EmptyStack

0

這可能會對你有所幫助,因爲你下載的圖像在UItableViewCells顯示在這裏我給你的背景沒有blocking UI在那裏你可以得到很好的教程鏈接的例子的例子。他們已經提到足夠好的方式同樣的事情。 go through this link

其餘的東西可以在他的答案中提到的Meera j Pai幫助解決。

0

我解決了這個問題既NSConnection連接 & 的NSTimer使用@Amar & @MeeraĴ排給出的答案,通過使用NSRunLoop

我已將連接代碼更改爲這樣。

_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO] 
[_connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];  
[_connection start]; 

它工作得很好!

謝謝大家。