2016-04-04 45 views
0

我想在另一行刪除動畫完成後插入一行。我一直在嘗試做以下:將行插入另一行刪除動畫

tableView.beginUpdates() 
CATransaction.begin() 

CATransaction.setCompletionBlock { 
    tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Right) 
} 

tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left) 

CATransaction.commit() 
tableView.endUpdates 

這給了我平時的斷言失敗時的行數是不一樣的,因爲它是被期待。

然後我用UIView動畫與完成塊的嘗試:

tableView.beginUpdates() 

func animations() { 
    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left) 
} 

func completion() { 
    if count == self.payments.count && self.payments.isEmpty { insert() } 
} 

UIView.animateWithDuration(0.5, animations: { animations() }) { _ in completion() } 

tableView.endUpdates() 

兩個嘗試是給我同樣的錯誤。是否可以或應該查看插入/刪除tableview行的自定義動畫?


編輯:

我設法讓它通過移動tableView.endUpdates()來完成塊的工作情況。但插入動畫仍然在該行被刪除的同時動畫。

是否有另一種方法呢?

回答

0

如果你知道多少時間你的動畫需要完成只是執行一些代碼前添加此功能來等待一個特定的時間量:

func delay(delay:Double, closure:()->()) { 
    dispatch_after(
     dispatch_time(
      DISPATCH_TIME_NOW, 
      Int64(delay * Double(NSEC_PER_SEC)) 
     ), 
     dispatch_get_main_queue(), closure) 
} 

用法:

delay(seconds: 0.5) { 
    //code to be delayed "0.5 sec" 
} 
相關問題