Swift - UITableView 选择单元格动画

jat*_*jat 2 animation transform uitableview uiviewanimation ios

我正在使用 didSelectRow at 方法对 tableView 单元格选择进行动画处理,该方法有效。我的代码如下:

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

let cell = tableView.cellForRow(at: indexPath)
            
            UIView.animate(withDuration: 0.2, animations: {
                
                cell!.transform = CGAffineTransform(scaleX: 0.97, y: 0.97)
                
            }, completion: { finished in
                
                UIView.animate(withDuration: 0.2) {
                    
                    cell!.transform = .identity
                }
                
            })

}
Run Code Online (Sandbox Code Playgroud)

我希望能够将其放入单元的自定义类文件中,但不知道从哪里开始。这可能吗 ?

谢谢

sin*_*dra 7

我认为你可以使用 func setSelected(_ :animated:)

首先,您必须创建 的子类UITableViewCell

假设我创建了一个类名TempTableViewCell,其中我们确实有一个预定义的函数override func setSelected(_ selected: Bool, animated: Bool)

这里的Selected是单元格是否被选中的值。因此,您可以将代码放入此函数中,如下所示。

例子

    class TempTableViewCell: UITableViewCell {
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }
    
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        if selected{
            UIView.animate(withDuration: 0.2, animations: {
                self.transform = CGAffineTransform(scaleX: 0.97, y: 0.97)
            }, completion: { finished in
                UIView.animate(withDuration: 0.2) {
                    self.transform = .identity
                }
            })
        }
    }
    
}
Run Code Online (Sandbox Code Playgroud)

要在单元格中使用它,请遵循以下代码,

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: TempTableViewCell.self), for: indexPath)
        return cell
    }

Run Code Online (Sandbox Code Playgroud)