Koloda - 加载时动画随机播放效果
Koloda - Animate shuffle effect on load
我正在使用 Koloda 展示一副可以刷过的扑克牌。我有这部分工作得很好。
当我最初加载这副纸牌时,我希望每个视图/纸牌分别飞入,然后显示为堆叠。我将其称为洗牌或 deal
效果(就像发牌时一样)。据我所知,Koloda 似乎不允许这样做。我看到的动画是在它们已经堆叠之后显示整个视图/帧堆栈。所以在我的例子中,这意味着整个甲板。我也没有看到一种在不导致完全重新加载的情况下逐一添加视图/卡片的方法。
如果我有 3 张卡片,这是我希望它的工作方式
卡片 1(卡片底部以动画方式从左侧飞入)
.2 秒等待
卡牌 2(牌组底部第二张/中间卡牌飞入)
.2 秒等待
卡片 3(卡片顶部飞入)
按照正常的 Koloda View 进行操作。
我已经尝试将动画添加到我的 UIView 中,但它看起来不正确。我目前的猜测是使用 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
}
}
我正在使用 Koloda 展示一副可以刷过的扑克牌。我有这部分工作得很好。
当我最初加载这副纸牌时,我希望每个视图/纸牌分别飞入,然后显示为堆叠。我将其称为洗牌或 deal
效果(就像发牌时一样)。据我所知,Koloda 似乎不允许这样做。我看到的动画是在它们已经堆叠之后显示整个视图/帧堆栈。所以在我的例子中,这意味着整个甲板。我也没有看到一种在不导致完全重新加载的情况下逐一添加视图/卡片的方法。
如果我有 3 张卡片,这是我希望它的工作方式
卡片 1(卡片底部以动画方式从左侧飞入)
.2 秒等待
卡牌 2(牌组底部第二张/中间卡牌飞入)
.2 秒等待
卡片 3(卡片顶部飞入)
按照正常的 Koloda View 进行操作。
我已经尝试将动画添加到我的 UIView 中,但它看起来不正确。我目前的猜测是使用 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
}
}