如何为 tableview 单元格执行放大、缩小动画?

How to perform a zoom-in , zoom-out animation for tableview cells?

我想知道如何重新制作这个动画?前 2 个单元格保持原样,但只有索引 2 中的单元格有动画。

现在我正在使用

重新创建它
let rotationTransform = CATransform3DTranslate(CATransform3DIdentity, -500, 10, 0)
cell.layer.transform = rotationTransform

这与 gif 中的外观和感觉不一样,有什么方法可以做到这一点吗?

其他信息:第一个单元格只是一个简单的单元格,第二个单元格是一个 collectionView,接下来的单元格是重复单元格。滑动目前正在使用滑动手势,我只需要有关如何重新创建此放大、缩小动画的信息。

如有任何帮助,我们将不胜感激。 谢谢

编辑:我尝试在问题上将 gif 大小更改为中等大小,但它没有播放,所以我再次将其更改为正常大小。

我实际上想出了一个执行此动画的简单方法。可能有更好的方法来做到这一点,但以防将来有人需要帮助。

我们写了 2 个函数用于 zoomIn 和 zoomOut(可以在任何地方使用)

func zoomOut(view : UIView,duration : Double,delay : Double)
{
    UIView.animate(withDuration: duration, delay: delay, options: UIView.AnimationOptions.curveEaseIn, animations: {
        view.transform = CGAffineTransform.identity.scaledBy(x: 0.95, y:  0.95)
     })
}
func zoomIn(view : UIView,duration : Double,delay : Double)
{
    UIView.animate(withDuration: duration, delay: delay, options: UIView.AnimationOptions.curveEaseIn, animations: {
        view.transform = CGAffineTransform.identity
     })
}

然后我们编写移动函数(可以在任何地方使用)

func movementAnimation(duration:Double,X:CGFloat,Y:CGFloat,item:UIView)
{
    UIView.animate(withDuration: duration) {
      item.transform = CGAffineTransform(translationX: X, y: Y)
        
    }
}

最后我们将这两个结合起来得到一个类似的动画!

zoomOut(view: Table, duration: 0.1, delay: 0)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
        movementAnimation(duration: 0.2, X: -500, Y: 0, item: self.Table)
            }
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
        movementAnimation(duration: 0, X: 500, Y: 0, item: self.Table)
        movementAnimation(duration: 0.2, X: 0, Y: 0, item: self.Table)
            }
zoomIn(view: self.Table, duration: 0.1, delay: 0.6)

这里首先将视图缩小(将比例缩小到 0.95),然后将其移动到外部屏幕 0.2 秒 duration.Once 其外部屏幕,它立即移动到屏幕右侧,持续时间为 0 秒。然后用 0.2 秒的持续时间将它移回原来的位置。现在我们调用 zoomIn 将视图恢复到其原始大小,持续时间为 0.1 秒。 0.5 秒是 zoomOut + movementOut + movementIn 函数花费的总时间。

最后重新加载 Table

DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
self.Table.reloadData()
}

希望这对某人有所帮助,感谢“Nikunj Kumbhani”的 pod 创意!