在我的应用中,我有一个水平的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)
}
}
所需的效果-当用户滚动到下一页时,图像视图被缩小并应用模糊效果-工作示例here。
这是通过使用动画师的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
然后调用setupSwipeAnimator()
来做到这一点,但是我得到了奇怪的行为。动画师只是立即应用模糊和缩放。似乎fractionComplete
属性不受尊重。
在应用再次激活后重新激活UIViewPropertyAnimator
的正确方法是什么?