为什么我在tableView中看到动画之前的静态文本

时间:2017-03-21 01:38:11

标签: ios swift uitableview

我正在向我的tableViewCell添加简单的堆栈动画,其中cells等动画正在添加到堆栈中。当我点击UIButton时,我将tableView分开,我首先看到一个具有我的值的静态单元格,然后在一个小间隙后我的动画工作。我不知道为什么我的tableView在动画之前会显示cell?这是我的VC代码:

override func viewDidAppear(_ animated: Bool) {

    animateTable()
}

func animateTable() {

    let cells = tableView.visibleCells
    let tableHeight: CGFloat = tableView.bounds.size.height

    for i in cells {
        let cell: UITableViewCell = i as UITableViewCell
        cell.transform = CGAffineTransform(translationX: 0, y: tableHeight)
    }

    var index = 0

    for a in cells {
        let cell: UITableViewCell = a as UITableViewCell
        UIView.animate(withDuration: 1, delay: 0.05 * Double(index), usingSpringWithDamping: 0.9, initialSpringVelocity: 0, options: .curveEaseInOut, animations: {
            cell.transform = CGAffineTransform(translationX: 0, y: 0);
        }, completion: nil)

        index += 1
    }
}

1 个答案:

答案 0 :(得分:1)

当您显示view时,通过调用UITableView已填充reloadData个数据。只有在animation出现后才能执行view。那么在那时,您将看到现有数据只有几分之一秒,然后animation将启动。

如果您不希望在animation运行之前显示数据,您可能希望在view加载animation之后不会通过执行以下操作来显示数据 - 这可能不是最好的解决方案,但它最容易实现:

1:添加一个新变量以指示您是否运行var wasAnimated = false

numberOfRowsInSection

2:如果return 0尚未投放,请在animationoverride func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if !wasAnimated { return 0 } // Rest of the original code } 中检查此变量。

animateTable

3:在执行reloadData代码的其余部分之前,将标记设置在animation的开头,然后设置为func animateTable() { wasAnimated = true tableView.reloadData() // The rest of the original code }

{{1}}

这应该让你得到你想要的行为:)