问题描述
我想知道如何重新创建此动画?前 2 个单元格保持原样,但只有索引 2 中的单元格有动画。
现在我正在使用
重新创建它let rotationTransform = CATransform3DTranslate(CATransform3DIdentity,-500,10,0)
cell.layer.transform = rotationTransform
为什么这看起来和感觉不像 gif 中的那样,是否有任何 pod 或某种方法可以实现这一点?
附加信息:第一个单元格只是一个简单的单元格,第二个单元格是一个集合视图,接下来的单元格是重复的单元格。滑动目前正在使用滑动手势,我只需要有关如何重新创建此放大、缩小动画的信息。
任何帮助将不胜感激。 谢谢
编辑:我尝试将问题上的 gif 大小更改为中等大小,但没有播放,因此我再次将其更改为正常大小。
解决方法
我实际上想出了一个简单的方法来执行这个动画。可能有更好的方法来做到这一点,但以防万一将来有人需要帮助。
我们为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 创意!