【问题标题】:Koloda - Animate shuffle effect on loadKoloda - 加载时的动画随机播放效果
【发布时间】:2017-06-22 17:36:11
【问题描述】:

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

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

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

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

.2 秒等待

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

.2 秒等待

卡片 3(甲板顶部飞入)

按照正常的 Koloda View 进行操作。

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

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

【问题讨论】:

    标签: ios swift snapkit koloda


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2015-11-18
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多