【发布时间】:2015-08-16 07:45:43
【问题描述】:
我正在为视图设置动画,我想暂停并恢复它。
使用苹果指南我创建了一个 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()
}
}
【问题讨论】:
-
您是否尝试过为您的动画设置
removedOnCompletion=NO;。这应该会阻止它被删除。 -
您还可以为通知事件
UIApplicationDidBecomeActiveNotification添加一个观察者,您可以在其中重新调整您的动画。您可以将其视为viewWillAppear,因为它不会在后台恢复时调用。 -
在这方面有很多重复的问题,包括“在应用程序从后台恢复时恢复动画停止的地方”的答案。见stackoverflow.com/questions/7568567/…
-
您没有注意到我尝试了答案中的方法并且对我不起作用。 :)
标签: ios swift uiviewanimation