CAAnimation 动画的暂停和恢复

暂停和恢复动画官方文档

要暂停动画,您可以利用图层采用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;
}

你可能感兴趣的:(CAAnimation 动画的暂停和恢复)