// // CALayer+AnimationPlayback.swift // Created by Philip Vasilchenko on 4/27/18. // import UIKit // Pause animations of layer tree // // Technical Q&A QA1673: // https://developer.apple.com/library/content/qa/qa1673/_index.html#//apple_ref/doc/uid/DTS40010053 public extension CALayer { var isAnimationsPaused: Bool { return speed == 0.0 } func pauseAnimations() { if !isAnimationsPaused { let currentTime = CACurrentMediaTime() let pausedTime = convertTime(currentTime, from: nil) speed = 0.0 timeOffset = pausedTime } } func resumeAnimations() { let pausedTime = timeOffset speed = 1.0 timeOffset = 0.0 beginTime = 0.0 let currentTime = CACurrentMediaTime() let timeSincePause = convertTime(currentTime, from: nil) - pausedTime beginTime = timeSincePause } }