Как рассчитать относительную продолжительность в animateKeyframes - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь понять, как использовать UIView.animateKeyframes, но я не могу на всю жизнь понять, как рассчитать время / продолжительность.

Я пытаюсь добиться следующего: я ожидаю всего этогоанимация продолжительностью 10 секунд, состоящая из ...

первый addKeyframe запускается за 01 секунду и занимает 1 секунду

второй addKeyframe запускается за 02 секунды и занимает 1 секунду

третий addKeyframe запускается в 05 секунд и занимает 2 секунды

четвертый addKeyframe запускается в 07 секунд и занимает 1 секунду

четвертый addKeyframe запускается в 09 секунд и занимает 1 секунду

  fileprivate func animateWelcomeText() -> Void {

        let duration: TimeInterval = 10

        UIView.animateKeyframes(withDuration: duration, delay: 0, options: .calculationModeLinear, animations: {
            UIView.addKeyframe(withRelativeStartTime: 1.0, relativeDuration: 1.0, animations: {
                self.introTextLabel.alpha = 1
            })

            UIView.addKeyframe(withRelativeStartTime: 2.0, relativeDuration: 1.0, animations: {
                self.introTextLabelTwo.alpha = 1
            })

            UIView.addKeyframe(withRelativeStartTime: 5.0, relativeDuration: 2.0, animations: {
                self.introTextLabel.alpha = 0
                self.introTextLabelTwo.alpha = 0
            })

            UIView.addKeyframe(withRelativeStartTime: 7.0, relativeDuration: 1.0, animations: {
                self.introTextLabelThree.alpha = 1
            })

            UIView.addKeyframe(withRelativeStartTime: 9.0, relativeDuration: 1.0, animations: {
                self.introTextLabelFour.alpha = 1
            })

        }) { (_) in
            print("Complete")
        }
    }

Ничего не происходит, и анимация завершается, и внезапно появляются последние 2 элемента.

1 Ответ

0 голосов
/ 29 ноября 2018

Это просто математика.Просто разделите все значения на продолжительность, чтобы получить относительные значения.

fileprivate func animateWelcomeText() -> Void {

    let duration: TimeInterval = 10

    UIView.animateKeyframes(withDuration: duration, delay: 0, options: .calculationModeLinear, animations: {
        UIView.addKeyframe(withRelativeStartTime: 1/duration, relativeDuration: 1/duration, animations: {
            self.introTextLabel.alpha = 1
        })
        UIView.addKeyframe(withRelativeStartTime: 2/duration, relativeDuration: 1/duration, animations: {
            self.introTextLabelTwo.alpha = 1
        })
        UIView.addKeyframe(withRelativeStartTime: 5/duration, relativeDuration: 2/duration, animations: {
            self.introTextLabel.alpha = 0
            self.introTextLabelTwo.alpha = 0
        })

        UIView.addKeyframe(withRelativeStartTime: 7/duration, relativeDuration: 1/duration, animations: {
            self.introTextLabelThree.alpha = 1
        })

        UIView.addKeyframe(withRelativeStartTime: 9/duration, relativeDuration: 1/duration, animations: {
            self.introTextLabelFour.alpha = 1
        })

    }) { (_) in
        print("Complete")
    }
}

У вас есть значения из x (10).Метод нуждается в этом из 1.

...