thuai
8/31/2016 - 2:53 AM

iOS CALayer 的 pause 和 resume

iOS CALayer 的 pause 和 resume

// 使用CABasicAnimation时,如果需要暂停动画、恢复动画时可以通过pauseLayer

- (void)pauseLayer:(CALayer*)layer {
    if (layer.speed == 0.0) {
        return;
    }
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
    layer.speed = 0.0;
    layer.timeOffset = pausedTime;
}

- (void)resumeLayer:(CALayer*)layer{
    if (layer.speed > 0) {
        return;
    }
    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;
}