集合视图中的几个动画



我正在学习动画集合视图,目前使用CollectionViewPagingLayout模板。

我不仅想在集合视图中使用滑动导航,还想使用按钮。这个想法是,滑动的动画不同于按钮的动画。

所以重点是-如何可能为一个集合视图配置两个不同的动画?

一个选择的动画工作完美:在viewDidLoad我声明选择的模板:

override func viewDidLoad() {
super.viewDidLoad()
let layout = CollectionViewPagingLayout()
collectionView.collectionViewLayout = layout
collectionView.isPagingEnabled = true
layout.numberOfVisibleItems = nil
}

然后有两个按钮,其工作原理与左右滑动相同。

在类结束后,我创建了一个带有动画的扩展,例如:

extension TargetCollectionViewCell: ScaleTransformView {
var scaleOptionsDetailed: ScaleTransformViewOptions {
return ScaleTransformViewOptions(
minScale: 0.6,
scaleRatio: 0.4,
translationRatio: CGPoint(x: 0.66, y: 0.2),
maxTranslationRatio: CGPoint(x: 2, y: 0)
)
}
}

但是我不明白如何设置第二个动画-然后如何调用它。我想要的结果示例如下:对于滑动动作,minScale参数应该是0.6。当我点击右/左按钮时,minScale参数应为0.9.

模板的作者提供的自述是详细的-但我没有在那里找到线索。我想,某种功能可能会有所帮助-或者另一个扩展。但是我试过了,完全没能弄清楚如何编写这个方法。

非常感谢您的帮助。

最终,我自己做到了。如果它对任何人都有用,一个可能的解决方案如下:

首先,创建一个动画类型,例如var animationType = 1

然后,在扩展中,有以下情况:

extension TargetCollectionViewCell: ScaleTransformView {
var scaleOptions: ScaleTransformViewOptions {
if animationType == 1 {
return ScaleTransformViewOptions(
minScale: 0.01,
maxScale: 0.01,
scaleRatio: 0,
translationRatio: .zero,
minTranslationRatio: .zero,
maxTranslationRatio: .zero,
shadowEnabled: false,
rotation3d: .init(angle: 0.8, minAngle: -90, maxAngle: 90, x: 0, y: 1, z: 0, m34: -0.001),
translation3d: .init(translateRatios: (0, -1, 0), minTranslateRatios: (0, 0, 1.25), maxTranslateRatios: (0, 0, 1.25)))
} else if animationType == 2 {
return ScaleTransformViewOptions(
minScale: 0.04,
maxScale: 0.04,
scaleRatio: 0,
translationRatio: .zero,
minTranslationRatio: .zero,
maxTranslationRatio: .zero,
shadowEnabled: false,
rotation3d: .init(angle: 0.8, minAngle: -90, maxAngle: 90, x: 0, y: 1, z: 0, m34: -0.001),
translation3d: .init(translateRatios: (0, -1, 0), minTranslateRatios: (0, 0, 1.25), maxTranslateRatios: (0, 0, 1.25)))
} else {
return ScaleTransformViewOptions(
minScale: 0.07,
maxScale: 0.07,
scaleRatio: 0,
translationRatio: .zero,
minTranslationRatio: .zero,
maxTranslationRatio: .zero,
shadowEnabled: false,
rotation3d: .init(angle: 0.8, minAngle: -90, maxAngle: 90, x: 0, y: 1, z: 0, m34: -0.001),
translation3d: .init(translateRatios: (0, -1, 0), minTranslateRatios: (0, 0, 1.25), maxTranslateRatios: (0, 0, 1.25)))
}

return ScaleTransformViewOptions(

)
}
}

在我的例子中,唯一改变的是minScale/maxScale参数-当然,所有其他选项都可以更改为。

最后一件事-添加一行代码到右/左按钮,所以它改变动画类型。对于左键,你添加:

@IBAction func swipeLeftButton(_ sender: Any) {
...
animationType = 1

}

代替…输入代码,描述按钮的基本功能。在我的例子中,它是一个向左滑动命令。

希望对别人有帮助。

最新更新