AnimatableTableViewCell.swift 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. //
  2. // Created by Jake Lin on 12/16/15.
  3. // Copyright © 2015 IBAnimatable. All rights reserved.
  4. //
  5. import UIKit
  6. @IBDesignable
  7. open class AnimatableTableViewCell: UITableViewCell, CornerDesignable, FillDesignable, BorderDesignable,
  8. TableViewCellDesignable, GradientDesignable,
  9. BackgroundImageDesignable, Animatable {
  10. // MARK: - CornerDesignable
  11. @IBInspectable open var cornerRadius: CGFloat = CGFloat.nan {
  12. didSet {
  13. configureCornerRadius()
  14. }
  15. }
  16. open var cornerSides: CornerSides = .allSides {
  17. didSet {
  18. configureCornerRadius()
  19. }
  20. }
  21. @IBInspectable var _cornerSides: String? {
  22. didSet {
  23. cornerSides = CornerSides(rawValue: _cornerSides)
  24. }
  25. }
  26. // MARK: - FillDesignable
  27. @IBInspectable open var fillColor: UIColor? {
  28. didSet {
  29. configureFillColor()
  30. }
  31. }
  32. open var predefinedColor: ColorType? {
  33. didSet {
  34. configureFillColor()
  35. }
  36. }
  37. @IBInspectable var _predefinedColor: String? {
  38. didSet {
  39. predefinedColor = ColorType(string: _predefinedColor)
  40. }
  41. }
  42. @IBInspectable open var opacity: CGFloat = CGFloat.nan {
  43. didSet {
  44. configureOpacity()
  45. }
  46. }
  47. // MARK: - BorderDesignable
  48. open var borderType: BorderType = .solid {
  49. didSet {
  50. configureBorder()
  51. }
  52. }
  53. @IBInspectable var _borderType: String? {
  54. didSet {
  55. borderType = BorderType(string: _borderType)
  56. }
  57. }
  58. @IBInspectable open var borderColor: UIColor? {
  59. didSet {
  60. configureBorder()
  61. }
  62. }
  63. @IBInspectable open var borderWidth: CGFloat = CGFloat.nan {
  64. didSet {
  65. configureBorder()
  66. }
  67. }
  68. open var borderSides: BorderSides = .AllSides {
  69. didSet {
  70. configureBorder()
  71. }
  72. }
  73. @IBInspectable var _borderSides: String? {
  74. didSet {
  75. borderSides = BorderSides(rawValue: _borderSides)
  76. }
  77. }
  78. // MARK: - TableViewCellDesignable
  79. @IBInspectable open var removeSeparatorMargins: Bool = false
  80. // MARK: - GradientDesignable
  81. open var gradientMode: GradientMode = .linear
  82. @IBInspectable var _gradientMode: String? {
  83. didSet {
  84. gradientMode = GradientMode(string: _gradientMode) ?? .linear
  85. }
  86. }
  87. @IBInspectable open var startColor: UIColor?
  88. @IBInspectable open var endColor: UIColor?
  89. open var predefinedGradient: GradientType?
  90. @IBInspectable var _predefinedGradient: String? {
  91. didSet {
  92. predefinedGradient = GradientType(string: _predefinedGradient)
  93. }
  94. }
  95. open var startPoint: GradientStartPoint = .top
  96. @IBInspectable var _startPoint: String? {
  97. didSet {
  98. startPoint = GradientStartPoint(string: _startPoint, default: .top)
  99. }
  100. }
  101. // MARK: - BackgroundImageDesignable
  102. @IBInspectable open var backgroundImage: UIImage? {
  103. didSet {
  104. configureBackgroundImage()
  105. }
  106. }
  107. // MARK: - Animatable
  108. open var animationType: AnimationType = .none
  109. @IBInspectable var _animationType: String? {
  110. didSet {
  111. animationType = AnimationType(string: _animationType)
  112. }
  113. }
  114. @IBInspectable open var autoRun: Bool = true
  115. @IBInspectable open var duration: Double = Double.nan
  116. @IBInspectable open var delay: Double = Double.nan
  117. @IBInspectable open var damping: CGFloat = CGFloat.nan
  118. @IBInspectable open var velocity: CGFloat = CGFloat.nan
  119. @IBInspectable open var force: CGFloat = CGFloat.nan
  120. @IBInspectable var _timingFunction: String = "" {
  121. didSet {
  122. timingFunction = TimingFunctionType(string: _timingFunction)
  123. }
  124. }
  125. open var timingFunction: TimingFunctionType = .none
  126. // MARK: - Lifecycle
  127. open override func prepareForInterfaceBuilder() {
  128. super.prepareForInterfaceBuilder()
  129. configureInspectableProperties()
  130. }
  131. open override func awakeFromNib() {
  132. super.awakeFromNib()
  133. configureInspectableProperties()
  134. }
  135. open override func layoutSubviews() {
  136. super.layoutSubviews()
  137. configureAfterLayoutSubviews()
  138. autoRunAnimation()
  139. }
  140. // MARK: - Private
  141. fileprivate func configureInspectableProperties() {
  142. configureAnimatableProperties()
  143. configureOpacity()
  144. configureSeparatorMargins()
  145. }
  146. fileprivate func configureAfterLayoutSubviews() {
  147. configureCornerRadius()
  148. configureBorder()
  149. configureGradient()
  150. }
  151. }