Закончите анимацию из UIViewPropertyAnimator ранее - PullRequest
0 голосов
/ 22 марта 2019

Я ищу способ добавить некоторые анимации к UIViewPropertyAnimator, которые заканчиваются раньше, чем другие. UIViewPropertyAnimator есть, например, метод, где вы можете добавить анимацию с задержкой

animator.addAnimations(animation: (()-> Void), delayFactor: CGFloat)

, поэтому анимация начинается с 50% продолжительности с delayFactor из 0.5.

Я ищу что-то вроде

animator.addAnimations(animation: (()->Void), realtiveDuration: CGFloat)

, поэтому анимация заканчивается через 50% времени при relativeDuration из 0.5.

После некоторых исследований я нашел решение с помощью

animator.addAnimations {
    UIView.animateKeyframes(withDuration: duration, delay: 0.0, animations: {
        UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.3) {
            view.alpha = 0.0
        }
    })
}

для архивирования этого поведения. Проблема в том, что я хочу использовать это в каком-то автомате, где я перебираю некоторые элементы и вызываю метод для каждого из элементов:

func animation(view: UIView) -> (() -> Void) {
    return {
        view.alpha = 0.0
    }
}

, который отлично работает, например, при использовании метода

animator.addAnimations(animation: element.animation(element.view), delayFactor: 0.5) но я не могу назвать это внутри

.addKeyframe(...){
    element.animation(element.view)
}

Может, у кого-нибудь из вас есть решение? Я думаю о переопределении UIViewPropertyAnimator, например, чтобы добавить запрашиваемый метод animator.addAnimations(animation: (()->Void), realtiveDuration: CGFloat) или что-то еще, но оставляю там свою зону комфорта.

1 Ответ

1 голос
/ 23 марта 2019

Вы можете позвонить так:

  UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: element.animation(element.view))
...