curent working order
This commit is contained in:
parent
ee5f0dfdc2
commit
898877a051
@ -58,28 +58,23 @@ open class LoadingSpinner: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct Pose {
|
struct Pose {
|
||||||
let secondsSincePriorPose: CFTimeInterval
|
let delay: CFTimeInterval
|
||||||
let start: CGFloat
|
let start: CGFloat
|
||||||
let length: CGFloat
|
let length: CGFloat
|
||||||
init(_ secondsSincePriorPose: CFTimeInterval, _ start: CGFloat, _ length: CGFloat) {
|
|
||||||
self.secondsSincePriorPose = secondsSincePriorPose
|
|
||||||
self.start = start
|
|
||||||
self.length = length
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This needs more attention
|
// TODO: This needs more attention
|
||||||
class var poses: [Pose] {
|
class var poses: [Pose] {
|
||||||
get {
|
get {
|
||||||
return [
|
return [
|
||||||
Pose(0.0, 0.000, 0.7),
|
Pose(delay: 0.0, start: 0.000, length: 0.7),
|
||||||
Pose(0.7, 0.500, 0.5),
|
Pose(delay: 0.7, start: 0.500, length: 0.5),
|
||||||
Pose(0.6, 1.000, 0.3),
|
Pose(delay: 0.6, start: 1.000, length: 0.3),
|
||||||
Pose(0.4, 1.500, 0.2),
|
Pose(delay: 0.5, start: 1.500, length: 0.2),
|
||||||
Pose(0.3, 1.875, 0.2),
|
Pose(delay: 0.4, start: 1.875, length: 0.2),
|
||||||
Pose(0.3, 2.250, 0.3),
|
Pose(delay: 0.3, start: 2.250, length: 0.3),
|
||||||
Pose(0.2, 2.625, 0.5),
|
Pose(delay: 0.2, start: 2.600, length: 0.5),
|
||||||
Pose(0.2, 3.000, 0.7)
|
Pose(delay: 0.2, start: 3.000, length: 0.7)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,19 +87,19 @@ open class LoadingSpinner: View {
|
|||||||
var strokeEnds = [CGFloat]()
|
var strokeEnds = [CGFloat]()
|
||||||
|
|
||||||
let poses = Self.poses
|
let poses = Self.poses
|
||||||
let totalSeconds = poses.reduce(0) { $0 + $1.secondsSincePriorPose }
|
let totalSeconds = poses.reduce(0) { $0 + $1.delay }
|
||||||
|
|
||||||
for pose in poses {
|
for pose in poses {
|
||||||
time += pose.secondsSincePriorPose
|
time += pose.delay
|
||||||
times.append(time / totalSeconds)
|
times.append(time / totalSeconds)
|
||||||
start = pose.start
|
start = pose.start
|
||||||
rotations.append(start * 2 * CGFloat.pi)
|
rotations.append(start * 2 * CGFloat.pi)
|
||||||
strokeEnds.append(pose.length)
|
strokeEnds.append(pose.length)
|
||||||
}
|
}
|
||||||
|
|
||||||
times.append(times.last!)
|
// times.append(times.last ?? 1)
|
||||||
rotations.append(rotations[0])
|
// rotations.append(rotations[0])
|
||||||
strokeEnds.append(strokeEnds[0])
|
// strokeEnds.append(strokeEnds[0])
|
||||||
|
|
||||||
animateKeyPath(keyPath: "strokeEnd", duration: totalSeconds, times: times, values: strokeEnds)
|
animateKeyPath(keyPath: "strokeEnd", duration: totalSeconds, times: times, values: strokeEnds)
|
||||||
animateKeyPath(keyPath: "transform.rotation", duration: totalSeconds, times: times, values: rotations)
|
animateKeyPath(keyPath: "transform.rotation", duration: totalSeconds, times: times, values: rotations)
|
||||||
@ -116,6 +111,7 @@ open class LoadingSpinner: View {
|
|||||||
animation.keyTimes = times as [NSNumber]?
|
animation.keyTimes = times as [NSNumber]?
|
||||||
animation.values = values
|
animation.values = values
|
||||||
animation.calculationMode = .linear
|
animation.calculationMode = .linear
|
||||||
|
animation.timingFunction = CAMediaTimingFunction(name: .linear)
|
||||||
animation.duration = duration
|
animation.duration = duration
|
||||||
animation.rotationMode = .rotateAuto
|
animation.rotationMode = .rotateAuto
|
||||||
animation.fillMode = .forwards
|
animation.fillMode = .forwards
|
||||||
@ -136,6 +132,7 @@ open class LoadingSpinner: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func pauseAnimations() {
|
func pauseAnimations() {
|
||||||
|
|
||||||
let pausedTime = layer.convertTime(CACurrentMediaTime(), from: nil)
|
let pausedTime = layer.convertTime(CACurrentMediaTime(), from: nil)
|
||||||
layer.speed = 0
|
layer.speed = 0
|
||||||
isHidden = true
|
isHidden = true
|
||||||
@ -143,6 +140,7 @@ open class LoadingSpinner: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func resumeAnimations() {
|
func resumeAnimations() {
|
||||||
|
|
||||||
let pausedTime = layer.timeOffset
|
let pausedTime = layer.timeOffset
|
||||||
isHidden = false
|
isHidden = false
|
||||||
layer.speed = speed
|
layer.speed = speed
|
||||||
@ -153,11 +151,14 @@ open class LoadingSpinner: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func stopAllAnimations() {
|
func stopAllAnimations() {
|
||||||
|
|
||||||
layer.removeAllAnimations()
|
layer.removeAllAnimations()
|
||||||
}
|
}
|
||||||
|
|
||||||
func pinWidthAndHeight(radius: CGFloat) {
|
func pinWidthAndHeight(radius: CGFloat) {
|
||||||
|
|
||||||
let diameter: CGFloat = radius * 2 + lineWidth
|
let diameter: CGFloat = radius * 2 + lineWidth
|
||||||
|
|
||||||
NSLayoutConstraint.activate([
|
NSLayoutConstraint.activate([
|
||||||
heightAnchor.constraint(equalToConstant: diameter),
|
heightAnchor.constraint(equalToConstant: diameter),
|
||||||
widthAnchor.constraint(equalToConstant: diameter)
|
widthAnchor.constraint(equalToConstant: diameter)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user