Closed. This question is off-topic。它目前不接受答案。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
11个月前关闭。
我想创建一个类似聊天的视图,为了模拟正在编写的消息,我添加了一个点气泡单元格,点的字母从0到1设置动画。
我已经在自定义单元格的
on-topic
但是,我还调用了
我该怎么办?谢谢你的帮助。
在
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
11个月前关闭。
我想创建一个类似聊天的视图,为了模拟正在编写的消息,我添加了一个点气泡单元格,点的字母从0到1设置动画。
我已经在自定义单元格的
layoutSubviews()
方法中添加了这个动画。on-topic
但是,我还调用了
tableView.scrollToRow()
,因此表视图总是向用户显示最后一个单元格。但我意识到调用此方法会破坏单元格内的动画(无论我是否正在设置scrollToRow()
方法的动画)。我该怎么办?谢谢你的帮助。
最佳答案
只需在类型指示符单元格中创建两个实例方法
一个用于开始动画,另一个用于重置动画
class TypingCell: UITableViewCell {
fileprivate let MIN_ALPHA:CGFloat = 0.35
@IBOutlet weak var dot0: UIView!
@IBOutlet weak var dot1: UIView!
@IBOutlet weak var dot2: UIView!
private func startAnimation() {
UIView.animateKeyframes(withDuration: 1.5, delay: 0, options: [.repeat, .calculationModeLinear], animations: {
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.1666, animations: {
self.dot0.alpha = MIN_ALPHA
})
UIView.addKeyframe(withRelativeStartTime: 0.16, relativeDuration: 0.1666, animations: {
self.dot0.alpha = 1
})
UIView.addKeyframe(withRelativeStartTime: 0.33, relativeDuration: 0.1666, animations: {
self.dot1.alpha = MIN_ALPHA
})
UIView.addKeyframe(withRelativeStartTime: 0.49, relativeDuration: 0.1666, animations: {
self.dot1.alpha = 1
})
UIView.addKeyframe(withRelativeStartTime: 0.66, relativeDuration: 0.1666, animations: {
self.dot2.alpha = MIN_ALPHA
})
UIView.addKeyframe(withRelativeStartTime: 0.83, relativeDuration: 0.1666, animations: {
self.dot2.alpha = 1
})
}, completion: nil)
}
func resetAnimation() {
dot0.layer.removeAllAnimations()
dot1.layer.removeAllAnimations()
dot2.layer.removeAllAnimations()
DispatchQueue.main.async { self.startAnimation() }
}
}
在
tableView(_: willDisplay: cell: forRowAt:)
上重置动画func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if let cell = cell as? TypingCell {
cell.resetAnimation()
}
}
10-04 19:52