Как добавить анимацию к уже запущенной анимации, основываясь на прогрессе последней? - PullRequest
0 голосов
/ 13 марта 2019

ЦЕЛЬ

Построение сложной анимации, при которой некоторые действия запускаются в зависимости от ее прогресса.

ВОПРОС

Можно ли проверить ход выполнения UIViewPropertyAnimator идобавить анимацию, когда она достигает заданной дроби, завершить что:

  • не использует UIView.animateKeyframes
  • не требует вмешательства пользователя

Другими словамикогда аниматор достигает заданного дробного фрагмента, к нему добавляются некоторые анимации.

ПРОБЛЕМЫ

Полная анимация включает в себя несколько анимаций различных объектов (хранящихся в массиве).Мне нужно добавить анимацию в определенное время (на основе% выполнения) и добавить действия, когда анимация завершена .

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

В некоторых свойствах вы можете управлять delayFactor, чтобы добавить анимацию для замены предыдущей цели.

       let animView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 200))
    animView.backgroundColor = UIColor.green

 animator =    UIViewPropertyAnimator.init(duration: 5.0, curve: UIView.AnimationCurve.easeInOut)

    view.addSubview(animView)
    animator.addCompletion { (position : UIViewAnimatingPosition) in
        if position == UIViewAnimatingPosition.end{
            animView.center  = CGPoint.init(x: 100, y: 300)
        }
    }
    animator.addAnimations({
        animView.center  = CGPoint.init(x: 600, y: 300)
    })
    animator.addAnimations({

        animView.center = CGPoint.init(x: 200, y: 200)
    }, delayFactor: 0.1)
    animator.addAnimations({

        animView.center = CGPoint.init(x: 300, y: 600)
    }, delayFactor: 0.5)
    animator.addAnimations({

        animView.center = CGPoint.init(x: 400, y: 400)
    }, delayFactor: 0.9)

        animator.startAnimation()
0 голосов
/ 13 марта 2019

UIView Animations предназначены для облегченных анимаций.

Если вы хотите создавать сложные анимации, я думаю, что лучше использовать CAAnimation .

Вы можете использовать CAAnimationGroup и keyTimes синхронизировать и группировать их.

Вот одна справка, которая может помочь: " Как создать сложную загрузочную анимацию в Swift ", руководство от raywenderlich.com

...