2012-01-09 9 views
7

beginUpdates/endUpdatesブロックを使用してtableViewを変更しています。途中で、ドロップシャドウを更新してtableViewの現在の構図を反映させる必要があります。UITableView beginUpdates/endUpdatesコールバック

tableViewのcontentSizeにKVOを設定しようとしましたが、アニメーションが終了するとendUpdatesでのみ呼び出されます。私が欲しいのは、たとえそれがピクセルだけであったとしても、contentSizeが変わる度に呼び出されるからです。これを達成する方法はありますか?

答えて

0

申し訳ありませんが、私はあなたがこれを行うことはできないと思います。 beginUpdatesの後にテーブルを変更すると、変更はendUpdatesの後に1つのアニメーションとしてアニメーション化されます。これらのアニメーション中にアニメーションコールバックはありません。私はこれを試していないので、これがうまくいくかどうかわからないが、beginUpdatesendUpdatesを入れ子にして、それぞれendUpdatesの後にあなたの影を更新しようとすることができる。

+2

をちょうどFYI:beginUpdatesとendUpdatesの呼び出しを入れ子にすることができます。このブロック内で挿入、削除、および選択呼び出しを行わないと、行数などの表属性が無効になることがあります。 –

+0

ネストされた呼び出しを使用する方法の例はありますか? – Rivera

24

これはどうですか?

[CATransaction begin]; 

[CATransaction setCompletionBlock:^{ 
    // animation has finished 
}]; 

[tableView beginUpdates]; 
// do some work 
[tableView endUpdates]; 

[CATransaction commit]; 
+0

それは私のためにそれをしました!ありがとう! – horseshoe7

+1

うわー!ほとんど動作しますが、更新を終了するテーブルビューと完了ブロックの実行との間には遅延があります。今のところ私はそれを使用します。ありがとう。 – SpaceDog

1

ルドルフの方法は期待通りに機能しませんでした。私の場合はUITableViewの行を選択していましたが、Rudolfの方法では、テーブルに小さなフリーズを伴う2つのアニメーションを実行させていました。beginUpdates/endUpdates内のアニメーション、少しフリーズ、完了ブロックのアニメーション。このコードを作成するために私にインスピレーションを与え

[tableView selectRowAtIndexPath:indexPath 
         animated:YES 
        scrollPosition:scrollPosition]; 

...これがシームレスに取り組んでいる:

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