10

deleteRowsAtIndexPaths中に起動されたアニメーションが終了したかどうかをキャッチする可能性があるかどうか疑問に思いましたか?私がやろうとしているのは、タップした行を除いて、UITableViewからすべての行を削除することです。次に、同じUITableViewにいくつかの行を挿入します。両方の操作は、別々のbeginUpadate/endUpdateブロックで実行されます。問題は、アニメーションの削除が終了する前に、挿入アニメーションが開始され、挿入された行が外部Webサービスからのものであるため、次々にアニメーションを起動したいということです。

標準のアニメーションをカスタムのアニメーションに置き換え、objective-cブロックを使用して最初のアニメーションが終了したときに次々に起動できるメソッドで、(UITableViewサブクラスの)挿入メソッドと削除メソッドをラップすることを考えていましたが、不可能に見えるか、やらないで。

よろしくお願いします!

4

3 に答える 3

15

テーブルの更新をラップするanimateWithDurationことでうまくいくと思います。

[UIView animateWithDuration:0.0 animations:^{
    [coursesTable beginUpdates];
    …
    [coursesTable endUpdates];
} completion:^(BOOL finished) {
    // Code to run when table updates are complete.
}];

私がここでStackOverflowで提案した他の方法は、私にはうまくいきませんでした。

私は一度この手法を使用し、テーブルのendUpdatesメソッドを呼び出した後に完了ブロックが呼び出され、呼び出された時間が妥当であるように見えることを確認するために十分にテストしましたが、コードを書き直したため、これ以上必要ありませんでしたアニメーションが実際に終了したことを完全に確認する前に。

于 2012-10-26T23:16:17.367 に答える
0

CATransactionアニメーションの完了をキャッチするために使用します

CATransaction.begin()
CATransaction.setCompletionBlock({
     // completion
})
// do your animation here
CATransaction.commit()
于 2017-07-13T10:05:17.847 に答える
0

iOS 11以降:

[tblProducts performBatchUpdates:^{
        [self->tblProducts deleteRowsAtIndexPaths:@[self.animDeleteIndex] withRowAnimation:UITableViewRowAnimationFade];
    } completion:^(BOOL finished) {
        [self->tblProducts reloadData];
}];
于 2019-09-27T09:26:09.373 に答える