如何为 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 创意!
我想知道如何重新制作这个动画?前 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 创意!