Завершение UIViewPropertyAnimator вызывается при приостановке
Я не использовал UIViewPropertyAnimator
очень (все еще старомодный парень из блоков), и я вижу какое-то поведение, которое не могу объяснить, и что документы на самом деле не дают никакого понимания.
Почему блок завершения аниматора вызывается с finalPosition
из .end
даже когда аниматор ставится на паузу сразу после его запуска?
let view = UIView()
let animator = UIViewPropertyAnimator(duration: 4, curve: .linear, animations: {
view.alpha = 0
})
animator.addCompletion { position in
print("done")
switch position {
case .start: print("start")
case .current: print("current")
case .end: print("end")
}
}
animator.startAnimation()
print("starting")
animator.pauseAnimation()
print("pausing")
Выход:
starting
pausing
done
end
2 ответа
Проблема, на которую ссылается @matt, заключается в том, что ваш вид не виден UIWindow
, поэтому анимация завершается немедленно. Вы получите тот же результат, если вы закомментируете animator.pauseAnimation()
заявление.
Вы можете исправить это, если вы используете игровую площадку, сделав view
liveView
страницы детской площадки:
import PlaygroundSupport
import UIKit
let view = UIView()
PlaygroundPage.current.liveView = view
// etc.
Если вы читаете документацию addCompletion с сайта разработчика Apple, одним из параметров является finalPosition. И вы можете использовать значение, чтобы определить, остановилась ли анимация в начале, конце или где-то посередине. И вызов pauseAnimation вызовет этот блок завершения где-то в средней позиции.
Завершение параметров Блок для выполнения после завершения анимации. Этот блок не имеет возвращаемого значения и принимает следующий параметр:
finalPosition Конечная позиция анимации. Используйте это значение, чтобы определить, остановились ли анимации в начале, конце или где-то посередине.