废话不多说 直接上代码
OC中的写法:
//该方法需要外界在调用时将自己的layer作为参数传进来
//暂停layer上面的动画
- (void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
//继续layer上面的动画
- (void)resumeLayer:(CALayer*)layer
{
//获取暂停动画时的时间
CFTimeInterval pausedTime = [layer timeOffset];
//设置动画属性
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
//开始动画
layer.beginTime = timeSincePause;
}
swift中的写法:
// MARK: - 直接给Layer添加一个分类 外界可以通过layer很方便的调用对应的方法
extension CALayer {
//暂停动画
func pauseAnimation() {
let pauseTime = convertTime(CACurrentMediaTime(), fromLayer: nil)
speed = 0.0
timeOffset = pauseTime
}
//恢复动画
func resumeAnimation() {
// 1.取出时间
let pauseTime = timeOffset
// 2.设置动画的属性
speed = 1.0
timeOffset = 0.0
beginTime = 0.0
// 3.设置开始动画
let startTime = convertTime(CACurrentMediaTime(), fromLayer: nil) - pauseTime
beginTime = startTime
}
}