我想创建一个类似于聊天的视图,并且为了模拟正在编写的消息,我添加了一个点气泡单元,该点的Alpha值从0到1动画。
我已将此动画添加到自定义单元格的layoutSubviews()
方法中。
但是,我还要调用tableView.scrollToRow()
,因此表视图始终向用户显示最后一个单元格。但是我意识到,调用此方法会破坏单元格内部的动画(无论我是动画的还是scrollToRow()
方法)。
我该怎么办?感谢您的帮助。
答案 0 :(得分:1)
只需在您的键入指示器单元格中创建两个实例方法 一个用于开始动画,另一个用于resetAnimation
2>/dev/null
在2>&1
上重置动画
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() }
}
}