58 lines
1.7 KiB
Swift
58 lines
1.7 KiB
Swift
//
|
|
// SolidCompositionLayer.swift
|
|
// lottie-swift
|
|
//
|
|
// Created by Brandon Withrow on 1/25/19.
|
|
//
|
|
|
|
import Foundation
|
|
import QuartzCore
|
|
|
|
final class SolidCompositionLayer: CompositionLayer {
|
|
|
|
// MARK: Lifecycle
|
|
|
|
init(solid: SolidLayerModel) {
|
|
let components = solid.colorHex.hexColorComponents()
|
|
colorProperty =
|
|
NodeProperty(provider: SingleValueProvider(Color(
|
|
r: Double(components.red),
|
|
g: Double(components.green),
|
|
b: Double(components.blue),
|
|
a: 1)))
|
|
|
|
super.init(layer: solid, size: .zero)
|
|
solidShape.path = CGPath(rect: CGRect(x: 0, y: 0, width: solid.width, height: solid.height), transform: nil)
|
|
contentsLayer.addSublayer(solidShape)
|
|
}
|
|
|
|
override init(layer: Any) {
|
|
/// Used for creating shadow model layers. Read More here: https://developer.apple.com/documentation/quartzcore/calayer/1410842-init
|
|
guard let layer = layer as? SolidCompositionLayer else {
|
|
fatalError("init(layer:) Wrong Layer Class")
|
|
}
|
|
colorProperty = layer.colorProperty
|
|
super.init(layer: layer)
|
|
}
|
|
|
|
required init?(coder _: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
// MARK: Internal
|
|
|
|
let colorProperty: NodeProperty<Color>?
|
|
let solidShape = CAShapeLayer()
|
|
|
|
override var keypathProperties: [String: AnyNodeProperty] {
|
|
guard let colorProperty = colorProperty else { return super.keypathProperties }
|
|
return [PropertyName.color.rawValue : colorProperty]
|
|
}
|
|
|
|
override func displayContentsWithFrame(frame: CGFloat, forceUpdates _: Bool) {
|
|
guard let colorProperty = colorProperty else { return }
|
|
colorProperty.update(frame: frame)
|
|
solidShape.fillColor = colorProperty.value.cgColorValue
|
|
}
|
|
}
|