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

Posted

技术标签:

【中文标题】自定义 UITableViewCell 和 setSelected:animated 上的动画:【英文标题】:Custom UITableViewCell and animation on setSelected:animated: 【发布时间】:2010-10-20 22:52:53 【问题描述】:

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

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

我的 drawRect: 在“动画时间”中被调用一次,大约在中途。我认为发生这种情况是因为它将单元格的突出显示属性从 1 设置为 0,并且当它低于 0.5 时它会捕捉到 0。

如何为这个过渡设置动画?我的猜测是使用通常的 beginAnimations: etc. 并将我的单元格对象中的自定义浮点字段从 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];
    

如果表格视图在屏幕上,这将非常有效。但是,如果我从导航(返回)返回到表格视图,而不是从选中淡入到未选中,它从不可见淡出到未选中。这是什么原因造成的?

【问题讨论】:

那么您在UITableViewCell 子类中实现setSelected:animated: 的效果如何? 我的问题基本上是如何编码:) 您需要重写该方法,以避免调用超类上定义的代码,并创建自己的动画。如果您不知道如何为 Google 制作动画,该怎么做。 我知道如何制作动画,我只是想知道在我开始编码之前使用 beginAnimation 制作自定义浮点字段的动画是否有效,您能确认一下吗? 好吧,动画自定义字段不起作用。即使我覆盖了动画属性的设置器并使其调用 setNeedsDisplay。现在我迷路了。 【参考方案1】:

答案有点晚,但可能对您和其他人仍然有用。您需要做的是在向超级发送消息之前分配您的自定义选择视图,如下所示:

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

【讨论】:

我使用了 UIImageView 和自定义的 selectiongradient。这有点假,但对我来说看起来很完美。谢谢! 你应该在创建单元格的时候设置它的 selectedBackgroundView,而不是在 setSelected:animated: 方法中;这将导致它被不必要地一遍又一遍地设置。

以上是关于自定义 UITableViewCell 和 setSelected:animated 上的动画:的主要内容,如果未能解决你的问题,请参考以下文章

如何正确链接自定义 UITableViewCell 和访问元素

使用故事板和子类自定义 UITableViewCell

UITableViewCell 自定义图片大小、阴影和边框

自定义 UITableViewCell 中的自定义 UIView

使用 Xcode 7 自定义 UITableViewCell 和 UITextfield

自定义 UITableViewCell 中的 UIPickerView