Swiftgram/TelegramUI/RadialPlayPauseContentNode.swift
2019-01-03 21:44:27 +04:00

61 lines
1.5 KiB
Swift

import Foundation
import Display
import AsyncDisplayKit
import LegacyComponents
import SwiftSignalKit
enum RadialPlayPauseMode {
case play
case pause
}
class RadialPlayPauseContentNode: RadialStatusContentNode {
var color: UIColor {
didSet {
self.leftShape.fillColor = self.color.cgColor
self.rightShape.fillColor = self.color.cgColor
self.setNeedsDisplay()
}
}
private var effectiveProgress: CGFloat = 1.0 {
didSet {
self.setNeedsDisplay()
}
}
private var animationCompletionTimer: SwiftSignalKit.Timer?
private var isAnimatingProgress: Bool {
return self.pop_animation(forKey: "progress") != nil || self.animationCompletionTimer != nil
}
private var enqueuedReadyForTransition: (() -> Void)?
private let leftShape = CAShapeLayer()
private let rightShape = CAShapeLayer()
init(color: UIColor, mode: RadialPlayPauseMode) {
self.color = color
super.init()
self.leftShape.fillColor = self.color.cgColor
self.rightShape.fillColor = self.color.cgColor
self.isLayerBacked = true
self.isOpaque = false
self.layer.addSublayer(self.leftShape)
self.layer.addSublayer(self.rightShape)
}
override func enqueueReadyForTransition(_ f: @escaping () -> Void) {
if self.isAnimatingProgress {
self.enqueuedReadyForTransition = f
} else {
f()
}
}
}