2021-10-12 15:07:00 +04:00

65 lines
1.3 KiB
Swift

//
// PointValueProvider.swift
// lottie-swift
//
// Created by Brandon Withrow on 2/4/19.
//
import Foundation
import CoreGraphics
/// A `ValueProvider` that returns a CGPoint Value
public final class PointValueProvider: AnyValueProvider {
/// Returns a CGPoint for a CGFloat(Frame Time)
public typealias PointValueBlock = (CGFloat) -> CGPoint
public var point: CGPoint {
didSet {
hasUpdate = true
}
}
/// Initializes with a block provider
public init(block: @escaping PointValueBlock) {
self.block = block
self.point = .zero
}
/// Initializes with a single point.
public init(_ point: CGPoint) {
self.point = point
self.block = nil
hasUpdate = true
}
// MARK: ValueProvider Protocol
public var valueType: Any.Type {
return Vector3D.self
}
public func hasUpdate(frame: CGFloat) -> Bool {
if block != nil {
return true
}
return hasUpdate
}
public func value(frame: CGFloat) -> Any {
hasUpdate = false
let newPoint: CGPoint
if let block = block {
newPoint = block(frame)
} else {
newPoint = point
}
return newPoint.vector3dValue
}
// MARK: Private
private var hasUpdate: Bool = true
private var block: PointValueBlock?
}