为什么动画不起作用但print语句有效?

时间:2018-05-14 18:04:24

标签: ios swift

import UIKit

protocol Shakeable {}

extension Shakeable where Self: UIView {
    func shake() {
        let animation = CABasicAnimation(keyPath: "position")
        animation.duration = 0.5
        animation.repeatCount = 5
        animation.autoreverses = true
        animation.fromValue = NSValue(cgPoint: CGPoint(x: self.center.x - 4 , y: self.center.y))
        animation.toValue = NSValue(cgPoint: CGPoint(x: self.center.x + 4, y: self.center.y))
        layer.add(animation, forKey: "position")
        print("Shaked!")
    }
}

然后我有一个自定义单元格的模型我在哪里实现这个协议。然后我在控制器中调用func

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TacoCell", for: indexPath) as? TacoCell {
            cell.shake()
        }
    }

我是编码的新手,所以请原谅我提出这个问题的坏方法。

1 个答案:

答案 0 :(得分:2)

这是你的问题:

if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TacoCell", for: indexPath) as? TacoCell {

您正在将单元格出列,而不是抓住已存在的单元格。 您应该使用cellForItem(at:) - 这将获取已存在的单元格的实例。

e.g。

if let cell = cellForItem(at: indexPath) as? TacoCell {
    cell.shake()
}