Управление анимацией UIView для быстрого - PullRequest
0 голосов
/ 04 августа 2020

Я тестирую несколько вещей с помощью функции анимации UIView, и меня немного смущает отсутствие у вас контроля над анимацией. Может быть, мне что-то не хватает

          UIView.animate(
            withDuration: TimeInterval(Int.random(in: 20 ..< 25)),
            delay: TimeInterval(cloudConfig.delay),
            options: [
                UIView.AnimationOptions.curveLinear,
                UIView.AnimationOptions.repeat,
            ],
            animations: {
                self.view.transform = CGAffineTransform(translationX: width, y: 0)
                self.parent!.layoutIfNeeded() // important for the animation
            },
            completion: { _ in
                print("hurray I know when it ends, if it would fire on repeat as well :) it does not")
            }
        )

Эта анимация просто перемещает вид слева направо и повторяет этот процесс. Кажется, я не могу найти что-либо в api, что позволяет мне искать определенное c время анимации и начинать оттуда. Или простые вещи, такие как пауза и воспроизведение, или получение текущей позиции воспроизведения. Есть ли способ получить некоторый контроль над анимацией, это почти как css анимация - нулевой контроль.

Спасибо за любые советы

1 Ответ

0 голосов
/ 04 августа 2020

Функция класса UIView UIView.animate(withDuration:delay:options:animations:completion:), которую вы используете, не дает вам ничего из того, о чем вы спрашиваете (возможность искать определенное c время в анимации, пауза / возобновление, получение текущей позиции анимации .)

Тем не менее, различные функции UIView.animate() работают, создавая CABasicAnimation анимации и запуская их на уровнях представления. Можно создать анимацию с помощью одной из функций UIView.animate(), а затем добраться до получившейся анимации слоя и сделать то, что вы описываете. Это плохо документировано, запутанно и суетливо, но возможно. В 2015 году я написал сообщение в блоге, в котором показано, как это делать (в Objective- C) http://wareto.com/keyframe-view-animations

Код этого сообщения можно найти по адресу https://github.com/DuncanMC/KeyframeViewAnimations

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

Я не смотрел этот код в течение нескольких лет и не пытался переписать его на Swift, но он действительно служит дорожной картой, если вы хотите выяснить, как это сделать. (Осторожно, это сложно и суетливо.)

Как упоминал TeeJaay, существует новый класс анимации UIViewPropertyAnimator, который поддерживает такие вещи, как приостановка и возобновление анимации, очищая их до указания c точек, et c. Если вам нужны эти способности, я предлагаю вам взглянуть на них. Вы сможете найти обучающие материалы по нему в Интернете.

...