应用再次激活时如何恢复UIViewPropertyAnimator行为

时间:2019-03-10 11:01:16

标签: ios animation uiviewanimation uiviewpropertyanimator

在我的应用中,我有一个水平的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的正确方法是什么?

0 个答案:

没有答案