2013-02-07 58 views
1

我想在表格單元格中閃爍圖像(在兩個圖像之間交換)。閃爍表格單元格中的圖像

什麼似乎最自然的我如下:

  • 設置一個的NSTimer每0.5秒老話,叫-BLINK:
  • 在-BLINK:我切換一個blinkStatus可變開/關
  • 在-cellForRowAtIndexPath :,我設置取決於blinkStatus

像現在,我也呼籲[myTableView reloadData]在-BLINK:方法,所以認爲得到更新。

這似乎是有道理的;單元格的狀態實際上是正在更改(圖像正在更改),因此更新表格是有意義的。

This Works。 但是,reloadData似乎干擾用戶交互:

在表編輯模式下,如果用戶選擇( - )刪除,並且Delete按鈕出現,它會在reloadData出現時消失。僅當[myTableView.editing]爲false時,只需執行reloadData就足夠簡單。 (並且在編輯模式下不閃爍不是一個大問題。)

但是,reloadData似乎仍然弄糟了事情(例如清除單元格選擇)。我也擔心每隔0.5秒調用一次reloadData的效率。

有沒有更流暢的方式讓圖像閃爍?我正在考慮保存一個指向任何閃爍單元格的指針,並更新定時器中的.image屬性。但這似乎是一個壞主意,因爲單元格被重用於表的不同行(ouch),我懷疑更新.image屬性會更新沒有reloadData的表。

回答

1

你嘗試使用[UIImageView animationImages]屬性? 只需提供您的圖片,設置所需的持續時間和animationRepeatCount並調用startAnimating

+0

這個功能就像一個魅力一樣。謝謝! (如果您可以告訴我如何同步多個單元格之間的閃爍,則可獲得獎勵積分。) – Dale

2

你應該只切換在-blink方法的圖像,只要你使用正確的接口(如cell.imageView.image),那麼圖像會自動更新,無需調用reloadData

+0

但是,如果用戶滾動,可重複使用的單元格對象可能會被重新用於顯示其他數據,因此任何cell.imageView.image都不會引用右側事情。我會閃爍同一個重複使用的單元格,而不是相同的數據。 – Dale

+0

您將給定單元格的'indexPath'傳遞給'blink'方法,並在那裏調用'cellForRowAtIndexPath'來獲取正確的單元格實例 –

+0

我認爲這是不正確的。 cellForRowAtIndexPath僅供系統調用以分配/重用/填充UITableCell用於顯示目的,而不用於調用主代碼。 (這樣做會讓你成爲你自己的一個單元,但不是那些有用的,也不是系統顯示的東西。)即使你掛上了一個指向UITableCell的指針,它也會在滾動時重用,而且你會眨眼錯誤的東西。 – Dale