UIView.animateWithDuration 在滚动 uitableviewcell 后停止
Posted
技术标签:
【中文标题】UIView.animateWithDuration 在滚动 uitableviewcell 后停止【英文标题】:UIView.animateWithDuration stops after scrolling uitableviewcell 【发布时间】:2016-05-19 07:12:22 【问题描述】:我在 uiTableViewCell 中添加了一个无限动画,它只会在表格视图单元格内闪烁一个 UILabel。
我的问题是,当我滚动表格视图时它只是停止闪烁
我的代码是
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("TripListCell", forIndexPath: indexPath) as! TripListCell
let trip = tripList[indexPath.section]
cell.lblTripDirection.textColor = UIColor(red: 51/255, green: 210/255, blue: 123/255, alpha: 1.0)
UIView.animateWithDuration(0.5, delay: 0.0, options: [.CurveEaseInOut, .Repeat, .Autoreverse, .AllowUserInteraction], animations:
cell.lblTripDirection.alpha = 0.0
, completion:
bool in
cell.lblTripDirection.alpha = 1.0
cell.lblTripDirection.textColor = UIColor.blackColor()
)
return cell
更新:
返回单元格之前的 UIView.commitAnimations() 对我有用。 谢谢大家:)
【问题讨论】:
【参考方案1】:这是因为cellForRowAtIndexPath
重复使用同一个单元格来显示其他数据。所以你不应该在cellForRowAtIndexPath
中写你的动画。
你应该尝试写在custom cell class
的awakeFromNib
或者你应该使用willDisplayCell
方法来写动画。
希望这会有所帮助:)
【讨论】:
awakeFromNib: 问题依旧, @ParthBhuva 这是一个非常古老的问题,但你最终解决了这个问题吗?【参考方案2】:您可以在自定义单元格TripListCell
中覆盖 UITableViewCell 的 prepareForReuse
方法。
每次调用dequeueReusableCellWithIdentifier
时都会调用prepareForReuse
。
【讨论】:
【参考方案3】:你应该把你的代码放在这个 UITableViewDelegate 方法中:
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath);
【讨论】:
【参考方案4】:TableView 重复使用它们的单元格,因此您的标签不可避免地会停止它们的动画。
您可以在自定义表格视图单元格上的prepareForReuse:
或tableView:willDisplayCell:forRowAtIndexPath:
delegate method 中将重复使用的单元格恢复为其默认状态。
在这种情况下你使用 UIView 动画,你只需要改变动画属性的值来取消动画并返回到默认状态。
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
//declaring the cell variable again
var cell: TripListCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! TripListCell
UIView.performWithoutAnimation
cell.lblTripDirection.layoutIfNeeded()
// do your animation..
...
【讨论】:
【参考方案5】:返回单元格之前的 UIView.commitAnimations() 对我有用。
【讨论】:
你在哪里声明了 UIView.commitAnimations() ?你有一个可行的例子吗?以上是关于UIView.animateWithDuration 在滚动 uitableviewcell 后停止的主要内容,如果未能解决你的问题,请参考以下文章