UITableViewCell
drawRect: メソッドで描画を行うサブクラスがあります。背景を含む四角形全体がカスタム描画されます。スクロールを非常にスムーズに保ちながら、非常に複雑なセルを取得できました。
私の問題: [table deselectRowAtIndexPath:path animated:YES];
Apple の HIG に準拠するために、ビューが表示されるたびに呼び出します。ただし、アニメーションは発生しません。もちろん、透明な(サブビューで作成された)カスタムビュー(Appleの背景が下に表示されるため)がある場合は機能しました。今はそうではありません。
私の drawRect: は、「アニメーション時間」の途中で一度呼び出されます。これは、セルの強調表示されたプロパティを 1 から 0 にアニメーション化し、0.5 を下回ると 0 にスナップするために発生すると思います。
このトランジションをアニメーション化するにはどうすればよいですか? 私の推測では、通常の beginAnimations: などを使用して、セル オブジェクトのカスタム浮動小数点フィールドを 1 から 0drawRect:
にアニメーション化することになります。
更新 これをほぼ機能させることができました。setSelected:animated: を次のようにオーバーライドしました。
- (void) setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:NO];
if (animated) {
[CATransaction begin];
CATransition* animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.6;
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[view.layer addAnimation:animation forKey:@"deselectRow"];
[CATransaction commit];
}
}
テーブルビューが画面上にある場合、これは完全に機能します。しかし、ナビゲーション (戻る) からテーブル ビューに戻ると、選択された状態から選択されていない状態にフェードするのではなく、非表示から選択されていない状態にフェードします。何が原因でしょうか?