动画立即结束,无论持续时间和延迟如何

Posted

技术标签:

【中文标题】动画立即结束,无论持续时间和延迟如何【英文标题】:Animation finishes immediately, regardless of duration and delay 【发布时间】:2016-09-13 05:24:19 【问题描述】:

我有这个动画块,但是cell的背景色立即是clear

cell.mylabel.backgroundColor = .orange
UIView.animate(withDuration: 3.0, delay:3, animations: 
    cell.mylabel.backgroundColor = .clear
)

关键是我在 cellForRowAt 中运行它

我尝试将动画移动到我的自定义单元格,但再次失败:

override func didMoveToWindow() 
            UIView.animate(withDuration: 3.0, delay:3, animations: 
                self.mylabel.backgroundColor = .clear
            )
    

【问题讨论】:

tableView:willDisplayCell:forRowAtIndexPath:而不是tableView:cellForRowAtIndexPath中做动画 【参考方案1】:

关键是我在 cellForRowAt 中运行它

这还为时过早,因为单元格可能尚未在屏幕视图层次结构中。您只能为屏幕视图层次结构中的视图设置动画。在将单元格添加为表格视图的子视图后,您需要找到一种添加动画的方法。

我会创建一个自定义的UITableViewCell 子类。在子类中,我将覆盖didMoveToWindow 以将动画添加到self

或者,它可以覆盖表视图控制器中的viewDidLayoutSubviews(如果有的话),并在该方法中添加动画。

【讨论】:

使用tableView:willDisplayCell:forRowAtIndexPath: 也可以。 tableView:willDisplayCell:forRowAtIndexPath 也不起作用,:(【参考方案2】:

这样试试,

cell.mylabel.layer.backgroundColor = UIColor.redColor().CGColor
UIView.animate(withDuration: 3.0, delay:3, animations: 
    cell.mylabel.layer.backgroundColor = UIColor.clearColor().CGColor
)

【讨论】:

为什么要改成图层? 我没有找到查看背景颜色的动画。是的,当然我们可以使用 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath ((RouteListCell *)cell).name.backgroundColor = [UIColor clearColor]; [((RouteListCell *)cell).name backgroundGlowAnimationFromColor:[UIColor whiteColor] toColor:[UIColor redColor] clearAnimationsFirst:YES]; @AVEbrahimi 我从***.com/questions/3762561/…找到了这个答案 @Sujit 将来,当您复制别人的答案时,您应该在答案中包含正确的参考。否则就是抄袭。更好的是,如果您认为另一个问题是重复的,请投票以关闭该问题作为重复。 @rmaddy 谢谢哥们。我会记得

以上是关于动画立即结束,无论持续时间和延迟如何的主要内容,如果未能解决你的问题,请参考以下文章

如何消除 animateKeyframes 动画开始和结束的延迟 - Swift UIKit

ngAnimate,addClass 回调在动画结束后不运行

SwiftUI:如何使用延迟在两个图像之间设置动画过渡?

transition(动画属性)

带有延迟和持续时间 Ios 的动画标签

UIViewPropertyAnimator 不尊重持续时间和延迟参数