2011-03-15 15 views
2

iPhone Mail.appとSMS.appのアプリでこの機能に気がつきましたが、それを自分で実装する方法は不明です。アニメーションUITableViewCell ContentViewが編集モードに入ると消えるようにする

標準的なUITableViewでは、ユーザーが「編集」ボタンをタップして削除ボタンが所定の位置に移動すると、コンテンツビューが右にスライドするにつれて、クイックフェードトランジションが実行され、薄いバージョンの(削除ボタンが占めるスペースを考慮して)

私は当初、これが有効になっているモードを編集する場合は、次のメソッドを呼び出すことによって行われたと思った:

[self.tableView reloadRowsAtIndexPaths: [tableView indexPathsForVisibleRows] withRowAnimation: UITableViewRowAnimationFade]; 

、それはまた、遷移に削除ボタン自体をフェードだけでなく、すべての付属品は、細胞を観察しかし、これは正しいことはできません(それはかなり奇妙に見えると言うには十分です)。

私はコンテンツビューを強制的に再描画し、テーブルが編集モードに入ったときに新しい描画されたバージョンを古いものにフェードインさせることはどうでしょうか?

UPDATE:私の最終的な解決策は、UITableViewCellののサブクラスを作成し、その後setEditingアクセサに次のコードを適用することでした

:カレブの答えに おかげで、これは後に、私は私が何であったかを取得することができ、コードの最後のブロックであります:

-(void) setEditing: (BOOL)editing animated: (BOOL)animated 
{ 
    [super setEditing: editing animated: animated]; 

    CATransition *animation = [CATransition animation]; 
    animation.duration = 0.2f; 
    animation.type = kCATransitionFade; 

    //redraw the subviews (and animate) 
    for(UIView *subview in self.contentView.subviews) 
    { 
     [subview.layer addAnimation: animation forKey: @"editingFade"]; 
     [subview setNeedsDisplay]; 
    } 
} 

私はおそらくまた明らかにする必要があります。パフォーマンスは非常に重要なので、私のセルのcontentView内のすべてがCG(つまりdrawRect :)でレンダリングされているため、そこに描画される要素は制御できません。

答えて

5

-setEditing:animated:をテーブルに呼び出すと、そのアニメーションが発生します。その後、表は可視セルのそれぞれに-setEditing:animated:を呼び出します。表のセルの標準的な動作は、コンテンツビューのサイズを調整し、右にシフトして、適切なアクセサリを削除することです。自分のセルがあり、編集モードで違った見た目が必要な場合は、-setEditing:animated:をオーバーライドして好きなようにセルの内容を調整できます。

+1

ああ、そのトリックをやった!ありがとう!!! – TiM

+0

偉大な - フォローアップのおかげで! – Caleb

+0

これはこれをかなりカバーしているのか分かりません。上記のアプリは、編集モードの行に削除ボタン(状態== 3)が表示されているときに、同じ遷移を使用します。 setEditing:animated:これが発生したときに呼び出されません。 –

関連する問題