2016-04-04 18 views
0

Ich versuche, eine Zeile nach einer anderen Zeile Löschanimation abgeschlossen ist einzufügen. Ich habe versucht, die folgenden Aktionen ausführen:Zeile nach einer anderen Zeile einfügen Löschen Animation

tableView.beginUpdates() 
CATransaction.begin() 

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

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

CATransaction.commit() 
tableView.endUpdates 

Dies gab mir die übliche Behauptung Versagen, wenn die Anzahl der Zeilen ist nicht das gleiche, wie es erwartet worden ist.

Dann habe ich versucht, eine UIView Animation mit einem Abschluss-Block mit:

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() 

Beide Versuche ist mir die gleichen Fehler zu geben. Ist es möglich oder sollte ich in eine benutzerdefinierte Animation zum Einfügen/Löschen von Tabellenansichtszeilen schauen?


Edit:

Ich konnte es durch tableView.endUpdates() zum Abschluss Block bewegen zu arbeiten. Die Einfügeanimation wird jedoch immer noch zur selben Zeit animiert, wenn die Zeile gelöscht wird.

Gibt es eine andere Möglichkeit, dies zu tun?

Antwort

0

, wenn Sie wissen, wie viel Zeit ist Ihre Animation nur hinzufügen, um diese Funktion warten für eine bestimmte Zeit in Anspruch nimmt, bevor einige Code ausführen:

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

Verbrauch:

delay(seconds: 0.5) { 
    //code to be delayed "0.5 sec" 
} 
Verwandte Themen