// // TextAnimator.swift // lottie-swift // // Created by Brandon Withrow on 1/9/19. // import Foundation final class TextAnimator: Codable { let name: String /// Anchor let anchor: KeyframeGroup? /// Position let position: KeyframeGroup? /// Scale let scale: KeyframeGroup? /// Skew let skew: KeyframeGroup? /// Skew Axis let skewAxis: KeyframeGroup? /// Rotation let rotation: KeyframeGroup? /// Opacity let opacity: KeyframeGroup? /// Stroke Color let strokeColor: KeyframeGroup? /// Fill Color let fillColor: KeyframeGroup? /// Stroke Width let strokeWidth: KeyframeGroup? /// Tracking let tracking: KeyframeGroup? private enum CodingKeys: String, CodingKey { // case textSelector = "s" TODO case textAnimator = "a" case name = "nm" } private enum TextSelectorKeys: String, CodingKey { case start = "s" case end = "e" case offset = "o" } private enum TextAnimatorKeys: String, CodingKey { case fillColor = "fc" case strokeColor = "sc" case strokeWidth = "sw" case tracking = "t" case anchor = "a" case position = "p" case scale = "s" case skew = "sk" case skewAxis = "sa" case rotation = "r" case opacity = "o" } required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: TextAnimator.CodingKeys.self) self.name = try container.decodeIfPresent(String.self, forKey: .name) ?? "" let animatorContainer = try container.nestedContainer(keyedBy: TextAnimatorKeys.self, forKey: .textAnimator) self.fillColor = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .fillColor) self.strokeColor = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .strokeColor) self.strokeWidth = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .strokeWidth) self.tracking = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .tracking) self.anchor = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .anchor) self.position = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .position) self.scale = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .scale) self.skew = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .skew) self.skewAxis = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .skewAxis) self.rotation = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .rotation) self.opacity = try animatorContainer.decodeIfPresent(KeyframeGroup.self, forKey: .opacity) } func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) var animatorContainer = container.nestedContainer(keyedBy: TextAnimatorKeys.self, forKey: .textAnimator) try animatorContainer.encodeIfPresent(fillColor, forKey: .fillColor) try animatorContainer.encodeIfPresent(strokeColor, forKey: .strokeColor) try animatorContainer.encodeIfPresent(strokeWidth, forKey: .strokeWidth) try animatorContainer.encodeIfPresent(tracking, forKey: .tracking) } }