我使用柯罗达来呈现一副可以刷过的扑克牌。我把这部分做得很好。
当我最初加载这副牌时,我希望每一张视图/卡片分别飞进来,然后显示为堆叠。我将此称为洗牌或deal效应(就像你打扑克牌时一样)。据我所知,似乎Koloda不允许这样做。我看到的动画是用来显示整个视图/帧堆栈后,它们已经堆叠起来。所以在我的例子中,这意味着整个甲板。我也没有看到一种方法来添加视图/卡片1到1,而不会导致完全重新加载。
如果我有3张卡片的话,下面是我想要的效果
卡1(甲板底部以动画形式从左边飞进来)
.2二次等待
第二张牌(第二张从甲板底部/中间牌飞进来)
.2二次等待
牌3(甲板顶部飞入)
按照正常的Koloda视图前进。
我尝试过将动画添加到我的UIViews中,这些动画被添加为contentViews,但看起来不太正确。我目前的猜测是使用animateAppearanceWithCompletion的自定义动画,但我没有多少运气。还有一个可能有效的frameForCard方法吗?
如果有帮助的话,我将在项目中使用Snapkit。我的目标是iOS 9+
发布于 2017-06-22 19:30:15
我子类化了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+,所以我可以在自定义视图的init /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
}
}https://stackoverflow.com/questions/44706015
复制相似问题