是否将动画应用于UIKit类的每个实例?

时间:2019-01-09 19:17:06

标签: ios swift

假设我有一些简单的Tableview动画代码。有没有办法将此应用到项目中的每个表视图?我当前的项目很大,每个文件夹都有单独的VC和情节提要。有什么方法可以普遍应用更改?

floats

1 个答案:

答案 0 :(得分:1)

协议

第一个可能的解决方案是创建协议。创建协议,然后对其进行扩展,并声明使您的单元动画的方法

protocol CellAnimating where Self: UITableViewDelegate {}

extension CellAnimating {

    func animateCell(_ cell: UITableViewCell) {
        cell.alpha = 0

        let transform = CATransform3DTranslate(CATransform3DIdentity, 0, 200, 0)

        cell.layer.transform = transform

        UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
            cell.alpha = 1
            cell.layer.transform = CATransform3DIdentity
        })
    }

}

然后在要使用此控制器的位置查看控制器,只需实现此协议,并在willDisplay内部调用此方法

class ViewController: UIViewController, UITableViewDelegate {
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        ...
        animateCell(cell)
        ...
    }
}

extension ViewController: CellAnimating {}

继承视图控制器

我想到的第二个选择是,您可以创建UIViewController的子类,然后在委托方法willDisplay中声明一些内容

class ViewController: UIViewController, UITableViewDelegate {
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        ...
    }
}

然后只需将每个要使用的视图控制器设置为ViewController的子类