要暂停动画,您可以利用图层采用CAMediaTiming协议并将图层动画的速度设置为0.0的事实。将速度设置为零会暂停动画,直到将值更改回非零值为止。
-(void)pauseLayer{
CFTimeInterval pausedTime = [self convertTime:CACurrentMediaTime() fromLayer:nil];
// 让CALayer的时间停止走动
self.speed = 0.0;
// 让CALayer的时间停留在pausedTime这个时刻
self.timeOffset = pausedTime;
}
#pragma mark 恢复CALayer的动画
-(void)resumeLayer{
CFTimeInterval pausedTime = self.timeOffset;
// 1. 让CALayer的时间继续行走
self.speed = 1.0;
// 2. 取消上次记录的停留时刻
self.timeOffset = 0.0;
// 3. 取消上次设置的时间
self.beginTime = 0.0;
// 4. 计算暂停的时间(这里也可以用CACurrentMediaTime()-pausedTime)
CFTimeInterval timeSincePause = [self convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
// 5. 设置相对于父坐标系的开始时间(往后退timeSincePause)
self.beginTime = timeSincePause;
}
网友评论