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

问题描述

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

现在我正在使用

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

为什么这看起来和感觉不像 gif 中的那样,是否有任何 pod 或某种方法可以实现这一点?

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

任何帮助将不胜感激。 谢谢

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

Gif Anim

解决方法

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

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

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,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,item: self.Table)
        movementAnimation(duration: 0.2,X: 0,item: self.Table)
            }
zoomIn(view: self.Table,delay: 0.6)

这里首先将视图缩小(将比例缩小到 0.95),然后以 0.2 秒的持续时间将其移到屏幕外。一旦它位于屏幕外,它立即以 0 秒的持续时间移到屏幕右侧。然后以 0.2 秒的持续时间将其移回原始位置。现在我们调用 zoomIn 将视图恢复到其原始大小,持续时间为 0.1 秒。 0.5 秒是 zoomOut + moveOut + moveIn 函数所用的总时间。

最后重新加载表格

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

希望这能帮助某人并感谢“Nikunj Kumbhani”的 pod 创意!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...