自定义UITableViewCell和setSelected上的动画:动画:

时间:2010-10-20 22:52:53

标签: iphone uitableview ios drawrect

我有一个UITableViewCell子类,它在drawRect:方法中进行绘制。整个矩形是自定义绘制的,包括背景。 我能够在保持滚动非常平滑的同时获得非常复杂的细胞。

我的问题:每当视图出现时我都会调用[table deselectRowAtIndexPath:path animated:YES];,以便符合Apple的HIG。但是,不会发生动画。当我有一个透明的自定义视图(用子视图创建)时(当时Apple的背景会出现在下面),它可以工作。现在它没有。

我的drawRect:在“动画时间”中被调用一次,大约一半。我认为这是因为它将单元格的突出显示属性设置为1到0,并且当它降至0.5以下时会捕捉到0。

如何设置此过渡的动画?我的猜测是使用通常的beginAnimations:等,并在我的单元格对象中设置一个自定义浮点字段,从1到0.这会反复调用drawRect:来制作动画吗?

更新 我设法使这几乎工作。我已经覆盖了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];
    }
}

如果表格视图在屏幕上,这非常有效。但是,如果我从导航(返回)返回到表格视图,而不是从选定内容淡出到未选中,它将从不可见变为未选中。是什么导致这种情况?

1 个答案:

答案 0 :(得分: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];
}