0

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

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

如果我有 3 张卡,这就是我希望它如何工作

卡片 1(甲板底部以动画方式从左侧飞入)

.2 秒等待

卡 2 (从甲板底部的第二张/中间卡飞入)

.2 秒等待

卡片 3(甲板顶部飞入)

继续正常的 Koloda View。

我尝试将动画添加到作为 contentViews 添加的 UIViews,但它看起来不正确。我目前的猜测是使用自定义动画,animateAppearanceWithCompletion但我运气不佳。还有一种frameForCard方法可行吗?

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

4

1 回答 1

0

我继承了 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

        }

    }
于 2017-06-22T19:30:15.293 回答