单元格消失时动画停止,再次出现时动画停止

Posted

技术标签:

【中文标题】单元格消失时动画停止,再次出现时动画停止【英文标题】:Animation stops when cell disappear and not resume when appear again 【发布时间】:2016-09-20 09:34:10 【问题描述】:

我有一个简单的动画(实际上是其中两个,但为了简单起见仅显示一个),它不断淡入和淡出标签。因此,当我以某些动画单元格消失然后向后滚动的方式滚动 tableview 时,这些单元格不再具有动画效果。

这是动画:

UIView.animateKeyframesWithDuration(
                0.5,
                delay: 0.0,
                options: [.Repeat, .Autoreverse, .AllowUserInteraction],
                animations: 
                    self.stateLabel.alpha = 0.5
             , completion: nil)

我在名为 setup() 的方法中启动此动画,该方法是我的自定义单元类(继承自 UITableViewCell)的实例方法。正如我所说,还有另一个动画表现相同,它会震动图像视图,所以我很肯定这与褪色动画无关。

我在出队后在cellForRowAtIndexPath方法中调用setup()方法。

我尝试的是在willDisplayCell方法中运行这个setup()方法,但结果是一样的(我当然不是在这个方法中出列单元格)。

我也尝试了断点,并执行了动画代码。只是,当单元格重新出现时,动画不会开始。那么问题来了,当单元格再次出现时,如何重新启动/继续动画?

【问题讨论】:

确保在运行此动画之前重置 alpha 值。您可以在cellForRowAtIndexPath 中进行操作。我的猜测是,一旦您显示一个单元格并滚动回该单元格,该值将保持不变,因此不会发生动画。 @Ayazmon 就是这样。如果您做出回答,我将非常乐意接受并支持它:) 很高兴它有帮助:) 我写了一个答案,基本上告诉了动画单元格的生命周期。 真棒问题我的问题得到了解决方案 真棒:) 【参考方案1】:

问题在于 UI 元素在显示后没有重置 alpha 值。因为如果正在使用dequeueReusableCellWithIdentifier 函数,UITableView 将恢复但不会重新创建单元格。因此,重置 cellForRowAtIndexPath 的 alpha 值并为 willDisplayCell 中的视图设置动画将解决您面临的问题。

【讨论】:

以上是关于单元格消失时动画停止,再次出现时动画停止的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionView 单元格中停止动画

TableView 交互阻止单元格中的动画

记住动画后的单元格状态

IPython notebook 在 plt.show() 之后停止评估单元格

uiimageview 动画在用户触摸屏幕时停止

CollectionView 在动画期间切断单元格