旋转关闭TableView展开部分时动画无法执行

时间:2018-10-25 05:09:48

标签: ios swift uitableview animation

我已经构建了一个可扩展的Tableview,并且我希望有一个箭头,该箭头在单元格未扩展时指向左侧,在单元格扩展时向下指向。

第一个动画(将箭头指向下方)的工作原理很像。尝试向后旋转(在关闭展开的单元格时)时,它只是跳回正常状态而没有任何动画。 在我的cellForRow中,我这样做:

cell.image1.rotate(item.opened ? -.pi/2 : 0, duration: 0.4)

我有一个扩展名:

extension UIView {
    func rotate(_ toValue: CGFloat, duration: CFTimeInterval) {
        let animation = CABasicAnimation(keyPath: "transform.rotation")
        animation.toValue = toValue
        animation.duration = duration
        animation.isRemovedOnCompletion = false
        animation.fillMode = CAMediaTimingFillMode.forwards
        self.layer.add(animation, forKey: nil)
    }
}

此功能在表格视图之外就像一种魅力。但是在Tableview内部,它总是在没有动画的情况下恢复正常。 知道这是哪里来的吗?

2 个答案:

答案 0 :(得分:0)

使用action方法而不是func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell的循环调用

尝试下面的代码。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
    cell.rotateArrow()
}

在CustomTableViewCell中

class CustomTableViewCell: UITableViewCell {

    @IBOutlet weak var arrowImageView: UIImageView!

    var isOpened = false

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    func rotateArrow() {

        isOpened = !isOpened
        arrowImageView.rotate(isOpened ? -.pi/2 : 0, duration: 0.4)
    }
}

答案 1 :(得分:0)

好,我找到了答案。 由于执行了我的旋转功能,它跳回了(没有任何动画)。输入0时不进行动画处理,因为图像在重新加载时已设置在单元格中。因此没有任何动画。现在我只需要设置图片并对其进行动画处理。

if item.opened{
            cell.image1.image = UIImage(named: "back")
            cell.image1.rotate(-.pi/2, duration: 0.3)
} else {
            cell.image1.image = UIImage(named: "down")
            cell.image1.rotate(.pi/2, duration: 0.3)
}