В моем приложении у меня есть горизонтальная UIScrollView
.Ниже этого вида прокрутки UIVisualEffectView
, а ниже UIImageView
.В моем представлении прокрутки есть 2 страницы.
Я также инициализирую свой аниматор:
private let scrollViewSwipeAnimator = UIViewPropertyAnimator(duration: 0, curve: .easeOut)
Вкл. viewDidLoad
Я настроил свой аниматор следующим способом:
private func setupSwipeAnimator() {
scrollViewSwipeAnimator.addAnimations {
self.backgroundImageView.transform = CGAffineTransform(scaleX: 0.85, y: 0.85)
self.backgroundImageBlurView.effect = UIBlurEffect(style: .regular)
}
}
Требуемый эффект - при переходе пользователя на следующую страницу, масштаб изображения уменьшается и применяется эффект размытия - рабочий пример здесь .
Это реализованов scrollViewDidScroll
с помощью свойства fractionComplete
аниматора
func scrollViewDidScroll(_ scrollView: UIScrollView) {
currentPage = Int(scrollView.contentOffset.x / scrollView.frame.size.width)
if scrollView.bounces {
if currentPage < 0 { currentPage = 0 }
if currentPage > pages.count { currentPage = pages.count }
}
let currentPageFrameX = CGFloat(currentPage) * view.frame.width
let offsetXFromCurrentPage = scrollView.contentOffset.x - currentPageFrameX
var percentToNextPage = offsetXFromCurrentPage / view.frame.width
if scrollView.bounces {
if percentToNextPage < 0 { percentToNextPage = 0 }
}
if currentPage == 0 {
scrollViewSwipeAnimator.fractionComplete = percentToNextPage
}
}
Это работает нормально, пока я не отправлю приложение в фоновый режим, а затем снова сделаю его активным.Аниматор свойств перестает работать, и я думаю, что мне нужно установить его снова, потому что все анимации были удалены iOS?
Я пытался сделать это, наблюдая за UIApplication.willEnterForegroundNotification
a, затем вызывая setupSwipeAnimator()
, но я получаю странныйповедение.Аниматор просто мгновенно применяет размытие и масштабирование.Кажется, свойство fractionComplete
не соблюдается.
Как правильно активировать UIViewPropertyAnimator
после того, как приложение снова станет активным?