3

UITableViewCell サブビューでフレームの変更をアニメーション化するためのベスト プラクティスはありますかreloadData

例:UIViewカスタムのサブビューとしてシンプルなものUITableViewCellがあり、サブビューは行幅全体の数% を占めています。これの幅の変更をアニメーション化したいUIView(コンテナー ビュー、UITableViewCell コンテンツ ビューは同じまま) が、リロードせずにアニメーション オプションをリロードすると、サブビューのフレームのサイズがスムーズに変化することが表示されないためです。私は…したい。

UIView私の最初の解決策は、可視セルを反復処理し、アニメーション ブロックを使用して各フレームを手動で変更することでした。

for (CustomCell *cell in [self.tableView visibleCells]])
{
    CGRect newFrame = CGRectMake(0.0,0.0,10.0,0.0); // different frame width
    [UIView animateWithDuration:0.5 animations:^{
        cell.block.frame = updatedFrame; // where block is the custom subview
     }];
}

しかし、これは iOS7 では機能しているように見えますが、iOS6 ではファンキーでトラブルシューティングが困難なグラフィックのねじれにつながっています。すべてのセルを反復処理するのはやり過ぎのようです。

これを行うための最良の方法に関する推奨事項はありますか?

4

1 に答える 1

4

NSNotificationCenter を使用して、特定のビューの幅を変更するように各セルに通知する通知を投稿できます。

セルが作成されると、特定の通知に登録できます。

[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(receiveNotification:) 
    name:@"Notification"
    object:nil];

次に、各セルで通知を処理し、必要な変更を加えることができます。

- (void) receiveNotification:(NSNotification *) notification
{
    CGRect newFrame = CGRectMake(0.0,0.0,10.0,0.0); // different frame width
[UIView animateWithDuration:0.5 animations:^{
    self.block.frame = updatedFrame; // where block is the custom subview
 }];
}

幅を変更したい場合は、イベントを投稿するだけです。

[[NSNotificationCenter defaultCenter] 
        postNotificationName:@"Notification" 
        object:self];

各セルを再利用することを忘れないでください。セルの割り当てが解除されたら、必ずそのイベントを登録解除してください。

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
于 2013-09-25T23:23:40.700 に答える