Функция класса 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. Если вам нужны эти способности, я предлагаю вам взглянуть на них. Вы сможете найти обучающие материалы по нему в Интернете.