Koloda - 在加载时动画随机播放效果



我正在使用Koloda来呈现一副可以刷过的扑克牌。我这部分工作得很好。

当我最初加载这副牌时,我希望每个视图/卡单独飞入,然后显示为堆叠。我会称之为洗牌或deal效果(就像你发牌时一样)。据我所知,科洛达似乎不允许这样做。我看到的动画用于在视图/帧已经堆叠后显示整个视图/帧堆栈。所以在我的例子中,这意味着整个甲板。我也看不到在不导致完全重新加载的情况下逐 1 添加视图/卡片的方法。

如果我有 3 张卡,我希望它的工作方式

卡牌1(卡组底部以动画方式从左边飞入)

.2 秒等待

牌2(副牌底部第2张/中间牌飞入)

.2 秒等待

卡牌3(牌顶飞入)

像正常的科洛达视图一样继续。

我尝试将动画添加到我的UIViews中,这些动画被添加为内容视图,但它看起来不正确。我目前的猜测是使用animateAppearanceWithCompletion的自定义动画,但我运气不佳。还有一种frameForCard方法可能有效?

如果有帮助,我正在项目中使用 Snapkit。我的目标是 iOS 9+

我子类化了KolodaViewAnimator并覆盖了初始加载动画

override func animateAppearanceWithCompletion(_ completion: KolodaViewAnimator.AnimationCompletionBlock) {
self.koloda?.alpha = 1.0
// custom extension method to return my CardView
let cards = self.koloda!.cards().reversed()
for (index, card) in cards.enumerated() {
let delay = Double(index) * 0.2
card.display(delay: delay)
}
completion?(true)
}

由于我的目标是iOS 9 +,因此我可以在自定义视图的初始化/设置阶段使用转换。从屏幕开始。

self.mySubView?.transform = CGAffineTransform(translationX: self.frame.width * -2, y: 0)

调用 display() 以从子类化的 ViewAnimator 触发动画

func display(delay: TimeInterval) {
UIView.animate(withDuration: 0.2, delay: delay, options: [], animations: {
// could be a subview
self.mySubView.transform = CGAffineTransform(translationX: 0, y: 0)
}) { (_) in
}
}

最新更新