3

UITableViewCelldrawRect: メソッドで描画を行うサブクラスがあります。背景を含む四角形全体がカスタム描画されます。スクロールを非常にスムーズに保ちながら、非常に複雑なセルを取得できました。

私の問題: [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];
    }
}

テーブルビューが画面上にある場合、これは完全に機能します。しかし、ナビゲーション (戻る) からテーブル ビューに戻ると、選択された状態から選択されていない状態にフェードするのではなく、非表示から選択されていない状態にフェードします。何が原因でしょうか?

4

1 に答える 1

7

少し遅い答えですが、それでもあなたや他の人にとって役立つかもしれません. あなたがする必要があるのは、次のように、スーパーにメッセージを送信する前に、カスタム選択ビューを割り当てることです:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    UIView *view = [[UIView alloc] initWithFrame:self.frame];
    view.backgroundColor = [UIColor colorWithRed:.9 green:.0 blue:.125 alpha:1.0];

    self.selectedBackgroundView = view;

    [super setSelected:selected animated:animated];
}
于 2010-12-11T21:56:51.007 に答える