Koloda - Анимированный эффект тасования на нагрузке
Я использую Koloda, чтобы представить колоду игральных карт, которые можно пролистать. У меня эта часть работает хорошо.
Когда я первоначально загружаю эту колоду карт, я бы хотел, чтобы каждый вид / карта летел отдельно, а затем отображался как сложенный. Я бы назвал это случайным или deal
эффект (например, когда вы сдаете карты). Из того, что я могу сказать, кажется, что Колода не допускает этого. Анимации, которые я вижу, предназначены для показа всего стека представлений / кадров после того, как они уже сложены. Так что в моем примере это будет означать всю колоду. Я также не вижу способа добавления просмотров / карт 1 к 1 без полной перезагрузки.
Вот как бы я хотел, чтобы у меня было 3 карты
Карта 1 (нижняя часть колоды летит слева в анимационном стиле)
.2 секундное ожидание
Карта 2 (2-ая снизу колоды / средняя карта)
.2 секундное ожидание
Карта 3 (летит верх колоды)
Действуйте как обычно Koloda View.
Я попытался добавить анимации в мои UIViews, которые добавляются как contentViews, но это выглядит неправильно. Моя текущая догадка - это пользовательская анимация animateAppearanceWithCompletion
но мне не очень повезло. Также есть frameForCard
метод, который может работать?
Я использую Snapkit в проекте, если это поможет. Я ориентируюсь на iOS 9+
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
}
}