自定义UITableViewCell和setSelected上的animation:animation:

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

我的问题:我打电话[table deselectRowAtIndexPath:path animated:YES]; 每当观点出现时,为了遵守苹果的HIG。 但是,没有animation发生。 当我有一个自定义的视图(用子视图创build)时,它是透明的(当然苹果的背景会出现在下面)。 现在不行。

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

我怎样才能让这个过渡animation? 我的猜测是使用通常的beginAnimations:等等,并将我的单元格对象中的自定义浮点字段从1改为0。这样调用drawRect:重复animation?

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

如果桌面视图在屏幕上,这完美地工作。 但是,如果我从导航(返回)返回到表格视图,而不是从选定的淡入淡出,它从不可见到淡入不选。 什么可以导致这个?

有点迟到的答案,但可能仍然对你和其他人有用。 你需要做的是在给超级用户发送消息之前分配自定义的select视图,如下所示:

 - (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]; }