我有一个图像,我使用此代码为viewDidAppear设置动画:
UIView.animateWithDuration(10.5, delay:0.0, options: [], animations:{
self.myImage.transform = CGAffineTransformMakeTranslation(0.0, 200)
}, completion: nil)
Run Code Online (Sandbox Code Playgroud)
我想点击时暂停动画myPauseButton,如果我再次点击它,则恢复动画.
t4n*_*hpt 27
暂停和恢复动画的2个功能,我从这里开始转换为Swift.
func pauseLayer(layer: CALayer) {
let pausedTime: CFTimeInterval = layer.convertTime(CACurrentMediaTime(), from: nil)
layer.speed = 0.0
layer.timeOffset = pausedTime
}
func resumeLayer(layer: CALayer) {
let pausedTime: CFTimeInterval = layer.timeOffset
layer.speed = 1.0
layer.timeOffset = 0.0
layer.beginTime = 0.0
let timeSincePause: CFTimeInterval = layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime
layer.beginTime = timeSincePause
}
Run Code Online (Sandbox Code Playgroud)
我有一个按钮来暂停或恢复动画,其中包含以下内容viewDidLoad:
var pause = false
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
UIView.animate(withDuration: 10.5) {
self.image.transform = CGAffineTransformMakeTranslation(0.0, 200)
}
}
@IBAction func changeState() {
let layer = image.layer
pause = !pause
if pause {
pauseLayer(layer)
} else {
resumeLayer(layer)
}
}
Run Code Online (Sandbox Code Playgroud)
这是答案的Swift 3版本+我将这些功能移到了扩展名
extension CALayer {
func pause() {
let pausedTime: CFTimeInterval = self.convertTime(CACurrentMediaTime(), from: nil)
self.speed = 0.0
self.timeOffset = pausedTime
}
func resume() {
let pausedTime: CFTimeInterval = self.timeOffset
self.speed = 1.0
self.timeOffset = 0.0
self.beginTime = 0.0
let timeSincePause: CFTimeInterval = self.convertTime(CACurrentMediaTime(), from: nil) - pausedTime
self.beginTime = timeSincePause
}
}
Run Code Online (Sandbox Code Playgroud)
由于iOS 10提供了UIViewPropertyAnimator您可以轻松解决问题的方法。
在您的控制器中创建以下属性:
var animationPaused = false
lazy var animator: UIViewPropertyAnimator = UIViewPropertyAnimator(duration: 10.5, curve: .easeInOut, animations: {
self.myImage.transform = CGAffineTransform(translationX: 0.0, y: 200)
})
Run Code Online (Sandbox Code Playgroud)
将以下代码添加到的点击处理程序中myPauseButton:
if self.animator.state == .active { // Don't start or pause animation when it finished
self.animationPaused = !self.animationPaused
self.animationPaused ? self.animator.pauseAnimation() : self.animator.startAnimation()
}
Run Code Online (Sandbox Code Playgroud)
从viewDidAppear(_ animated: Bool)以下代码行开始动画:
self.animationPaused = false
self.animator.startAnimation()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7853 次 |
| 最近记录: |