2016-07-21 84 views
3

當我顯示我的tableview時,我已經讓我的單元格帶有這樣的動畫。如何檢查一個單元格是否已經顯示Swift

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 

      cell.alpha = 0 
      let rotation = CATransform3DTranslate(CATransform3DIdentity, -250, 20, 0) 
      cell.layer.transform = rotation 
      UIView.animateWithDuration(0.9){ 
      cell.alpha = 1 
      cell.layer.transform = CATransform3DIdentity 

    } 

它的工作是這樣的,但是當我走下去,然後再次看到以前的單元格動畫仍然存在。

顯示我相信我必須檢查單元格是否已顯示。

我嘗試的一些方法是使用didEndDisplayingCell函數並將cell.tag放入數組中,然後檢查當前單元格是否在array.contains(cell.tag)的數組內,但它不起作用。 其實動畫只爲三個第一個單元格工作,然後什麼也沒有。

+0

use visibleCells for獲得可見的細胞。 –

+0

看到這一次http://stackoverflow.com/questions/3326658/determine-if-a-tableview-cell-is-visible –

+0

@ Anbu.Karthik謝謝你的答案,但我想知道哪些細胞已被看到,所以動畫將不會再次用於已經看到的單元格 –

回答

4

您應該保留一個indexPaths數組,每當顯示一個單元格時添加它。這樣你可以檢查單元格是否已經動畫。

if (!indexPaths.contains(indexPath)) { 
    indexPaths.append(indexPath) 
    cell.alpha = 0 
    let rotation = CATransform3DTranslate(CATransform3DIdentity, -250, 20, 0) 
    cell.layer.transform = rotation 
    UIView.animateWithDuration(0.9){ 
     cell.alpha = 1 
     cell.layer.transform = CATransform3DIdentity 
    } 
} 
+0

謝謝..它的工作! 我會在3分鐘內接受你的回答 –

1

正如@詹姆斯-P在評論中提到 - 只需創建一個數組

var indexPathArray = [NSIndexPath]() 

和重寫你的willDisplayCell方法:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 

    if !indexPathArray.contains(indexPath) { 

     indexPathArray.append(indexPath) 

     cell.alpha = 0 
     let rotation = CATransform3DTranslate(CATransform3DIdentity, -250, 20, 0) 
     cell.layer.transform = rotation 
     UIView.animateWithDuration(0.9){ 
      cell.alpha = 1 
      cell.layer.transform = CATransform3DIdentity 
     } 
    } 
} 
1

你可以做的就是把電池的indexpath在一個數組中,並檢查indexpath是否在數組中。如果indexpath在數組中,則不執行動畫

相關問題