CALayer上动画的暂停和恢复
#pragma mark 暂停 CALayer 的动画
-( void )pauseLayer:( CALayer *)layer
{
CFTimeInterval pausedTime = [layer convertTime : CACurrentMediaTime () fromLayer : nil ];
// 让 CALayer 的时间停止走动
layer.speed = 0.0 ;
// 让 CALayer 的时间停留在 pausedTime 这个时刻
layer.timeOffset = pausedTime;
}
#pragma mark 恢复 CALayer 的动画
-( void )resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = layer.timeOffset;
// 1. 让 CALayer 的时间继续行走
layer.speed = 1.0 ;
// 2. 取消上次记录的停留时刻
layer.timeOffset = 0.0 ;
// 3. 取消上次设置的时间
layer. beginTime = 0.0 ;
// 4. 计算暂停的时间 ( 这里也可以用 CACurrentMediaTime()-pausedTime)
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer: nil ] - pausedTime;
// 5. 设置相对于父坐标系的开始时间 ( 往后退 timeSincePause)
layer.beginTime = timeSincePause;
}