如何为屏幕底部的插入部分设置动画

时间:2017-01-23 13:27:28

标签: ios swift uitableview core-animation

我需要在UITableView中制作动画来插入部分,但我需要从屏幕底部设置动画部分。

并不像默认的UITableViewRowAnimation动画之一。

这是我需要的动画:

Animation description

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:3)

我想通过一个简单的解决方案来解决这个问题。

public func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    if shouldAnimate {
        cell.alpha = 0
        let transform = CATransform3DTranslate(CATransform3DIdentity, 0, UIScreen.main.bounds.height, 0)
        cell.layer.transform = transform

        UIView.animate(withDuration: 0.5, animations: {
            cell.alpha = 1
            cell.layer.transform = CATransform3DIdentity
        })
    }
}

public func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if shouldAnimate {
        view.alpha = 0
        let transform = CATransform3DTranslate(CATransform3DIdentity, 0, UIScreen.main.bounds.height, 0)
        view.layer.transform = transform

        UIView.animate(withDuration: 0.5, animations: {
            view.alpha = 1
            view.layer.transform = CATransform3DIdentity
        })
    }
}

public func addSections(sections: IndexSet) {
    shouldAnimate = true
    CATransaction.begin()
    CATransaction.setCompletionBlock({ self.shouldAnimate = false })

    tableView.beginUpdates()
    tableView.insertSections(sections, with: .top)
    tableView.endUpdates()

    tableView.scrollToRow(at: IndexPath(row: 0, section: 1), at: .top, animated: true)

    CATransaction.commit()
}

所以willDisplay cell/header从屏幕底部处理动画。

shouldAnimate在完成insertSection

后取消单元格动画

答案 1 :(得分:0)

怎么样

  • 创建一个新表,将其添加为屏幕底部的子视图 并调用reloadData以仅使用第二个数据填充它 部分。
  • 将此新表格放置到现有位置下方 部分。
  • 新部分到位后,使用所有数据重新加载主表,然后从其超级视图中删除第二个表。