天道酬勤,学无止境

Pause and Resume UIViewAnimation when app goes to background

问题

我正在为视图设置动画,我想暂停它并恢复它。

使用苹果指南,我创建了一个 CALayer 扩展

extension CALayer {

    func pause() {
        var pauseTime = self.convertTime(CACurrentMediaTime(), fromLayer: nil)
        self.speed = 0.0
        self.timeOffset = pauseTime
    }

    func resume() {
        var pausedTime = self.timeOffset
        self.speed = 1.0
        self.timeOffset = 0.0
        self.beginTime = 0.0
        var timeSincePause = self.convertTime(CACurrentMediaTime(), toLayer: nil) - pausedTime

        self.beginTime = timeSincePause
    }
}

这段代码运行良好,除非该应用程序进入后台。 当我将应用程序带回前台时,动画完成(即使时间没有过去)并且当我单击恢复时它没有再次启动。

好的。 我尝试为 CALayer 设置动画,但我遇到了同样的问题。

extension CALayer {

   func animateY(newY:CGFloat,time:NSTimeInterval,completion:()->Void){
    CATransaction.begin()
    CATransaction.setCompletionBlock(completion)
    let animation = CABasicAnimation(keyPath: "position.y")
    animation.fromValue = self.position.y
    animation.toValue  = newY
    animation.duration = time
    animation.delegate = self
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
    animation.removedOnCompletion = false // don't remove after finishing
    self.position.y = newY
    self.addAnimation(animation, forKey: "position.y")
    CATransaction.flush()

  }
}
回答1

我推荐使用CABasicAnimation 。 您的恢复/暂停方法应该没问题,因为它们来自这个答案。 您应该尝试使用Core Animation而不是UIViewAnimation ,然后恢复/暂停将起作用。

然后,您可以注册两个通知UIApplicationWillEnterForegroundNotificationUIApplicationDidEnterBackgroundNotification以完全控制暂停/恢复操作。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐