动画表格视图单元格,包括标题

时间:2016-02-23 15:57:57

标签: ios swift uitableview

我使用:

为表格视图的单元格设置动画
func animateCells(tableView: UITableView) {
    tableView.reloadData()

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

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

    var index = 0

    for a in cells {
        let cell: UITableViewCell = a as UITableViewCell
        UIView.animateWithDuration(animationDuration, delay: animationDelay * Double(index),usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
            cell.transform = CGAffineTransformMakeTranslation(0, 0);
            }, completion: nil)

        index += 1
    }
}

这仅适用于表格视图中的单元格。但是我也有一些带有标题的表,在这些情况下动画不起作用。如何在上面的动画代码中包含标题?谢谢。

2 个答案:

答案 0 :(得分:2)

UITableView中有两个标题视图。

UITableView的标题视图

这是UITableView上方显示的附件视图。它可以像这样设置:

self.tableView.tableHeaderView = UIView()

您也可以从tableHeaderView属性获取标题视图。

部分的标题视图

每个部分都可以有自己的标题视图。为了设置tableView(_:viewForHeaderInSection:)的{​​{1}}部分的标题视图,必须实现。

您可以从UITableViewDelegate的{​​{1}}获取部分的标题视图。

headerViewForSection(_:)

方法UITableView根据the reference document返回let headerView = self.tableView.headerViewForSection(0)! ,但它必须在您的实现中返回tableView(_:viewForHeaderInSection:)个对象。如果返回UIView,则UITableViewHeaderFooterView将返回UIView

headerViewForSection(_:)

我希望用这个解决你的问题。

答案 1 :(得分:2)

解决了tableView部分标题动画的问题:

// animate section header
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    let numberOfSections = tableView.numberOfSections
    let tableHeight: CGFloat = tableView.bounds.size.height
    var index = 0

    for i in 0...numberOfSections - 1 {
        if (section == i) {
            view.transform = CGAffineTransformMakeTranslation(0, tableHeight)
            UIView.animateWithDuration(1.0, delay: 0.05 * Double(index),usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: { () -> Void in
                view.transform = CGAffineTransformMakeTranslation(0, 0)
                }, completion: nil)
        }
        index += 1
    }
}

和细胞:

// animate cells
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    let numberOfSections = tableView.numberOfSections
    let tableHeight: CGFloat = tableView.bounds.size.height
    var index = 0

    for i in 0...numberOfSections - 1 {
        let numberOfCells = tableView.numberOfRowsInSection(i)

        for j in 0...numberOfCells - 1 {
            if (indexPath.section == i && indexPath.row == j) {
                cell.transform = CGAffineTransformMakeTranslation(0, tableHeight)
                UIView.animateWithDuration(1.0, delay: 0.05 * Double(index),usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
                    cell.transform = CGAffineTransformMakeTranslation(0, 0);
                    }, completion: nil)
            }
            index += 1
        }
    }
}

感谢您的提示!!