Есть ли способ наблюдать за изменениями в FractionComplete в UIViewPropertyAnimator?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ наблюдать за изменениями в FractionComplete в UIViewPropertyAnimator?

Сообщение Anonymous »

Я рассматривал очень интересный новый класс UIViewPropertyAnimator в iOS 10. Он позволяет вам легко делать такие вещи, как приостановка, возобновление и реверс анимации UIView в реальном времени. Раньше вам приходилось манипулировать базовыми CAAnimations, созданными системой, чтобы сделать это с анимацией UIView.

Новый класс UIViewPropertyAnimator имеет свойство дробьComplete. Оно варьируется от 0,0 (начало анимации) до 1,0 (конец анимации). Если вы измените значение, вы сможете «прочистить» анимацию от начала до конца.

У меня есть демонстрационный проект на Github под названием KeyframeViewAnimations, который позволяет вам использовать ползунок для перемещения UIView и CAAnimations вперед и назад, используя довольно загадочные приемы CAAnimation. Во время выполнения анимации ползунок перемещается от начала до конца, показывая ход анимации. Этот проект был написан на Objective-C до выпуска Swift, но базовые методы в Objective-C и Swift одинаковы.

Я решил создать эквивалентный проект, используя UIViewPropertyAnimator. Есть некоторые особенности, но все довольно просто. Одна вещь, которую я не мог понять, как сделать чисто, — это наблюдать за ходом изменения свойстваfractionComplete анимации, чтобы я мог обновлять ползунок по мере продвижения анимации. Я попытался настроить KVO (наблюдение за значением ключа) для свойстваfractionComplete, но оно не вызывает уведомление KVO до завершения анимации.

В итоге я установил таймер, который работает с очень небольшим интервалом и неоднократно запрашивает свойство FractionComplete UIViewPropertyAnimator и обновляет ползунок по мере его выполнения. Это работает, но это не очень чистый способ ведения дел. Было бы намного лучше, если бы был способ получать уведомления о ходе анимации.

Надеюсь, я что-то упускаю.

Вы можете увидеть проект на основе UIViewPropertyAnimator на Github по этой ссылке: UIViewPropertyAnimator-test.

Код, который получает значение прогресса от аниматора:

Код: Выделить всё

func startTimer(_ start: Bool) {
if start {
timer = Timer.scheduledTimer(withTimeInterval: 0.02,
repeats: true) {
timer in
var value = Float(self.viewAnimator.fractionComplete)
if self.animatingBackwards {
value = 1 - value
}
self.animationSlider.value = value
}
}
else {
self.timer?.invalidate()
}
}
Вероятно, мне следует преобразовать приведенный выше код, чтобы использовать таймер CADisplayLink вместо стандартного таймера (NSTimer), но я надеюсь, что есть лучший способ.< /п>

Подробнее здесь: https://stackoverflow.com/questions/410 ... tyanimator
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»