Closed. This question is off-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