mirror of
https://github.com/exyte/Macaw.git
synced 2024-09-11 13:15:35 +03:00
Move caTimingFunctions away
This commit is contained in:
parent
24c8e0b8f1
commit
fb7590bdd1
@ -14,7 +14,7 @@ class EasingView: MacawView {
|
||||
let fromStroke = Stroke(fill: Color.black, width: 3)
|
||||
let toStroke = Stroke(fill: Color.black, width: 1, dashes: [3, 3])
|
||||
|
||||
let all = [Easing.ease, Easing.linear, Easing.easeIn, Easing.easeOut, Easing.easeInOut]
|
||||
let all = [Easing.ease, Easing.linear, Easing.easeIn, Easing.easeOut, Easing.easeInOut, Easing.elasticInOut]
|
||||
|
||||
for (i, easing) in all.enumerated() {
|
||||
let y = Double(150 + i * 75)
|
||||
|
@ -448,6 +448,8 @@
|
||||
5B6E194220AC58F900454E7E /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6E191F20AC58F900454E7E /* Color.swift */; };
|
||||
5B6E194320AC58F900454E7E /* Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6E192020AC58F900454E7E /* Gradient.swift */; };
|
||||
5B6E194420AC58F900454E7E /* Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6E192020AC58F900454E7E /* Gradient.swift */; };
|
||||
5B7D7ED321300D4A00B5ED00 /* TimingFunction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7D7ED221300D4A00B5ED00 /* TimingFunction.swift */; };
|
||||
5B7D7ED421300D4A00B5ED00 /* TimingFunction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7D7ED221300D4A00B5ED00 /* TimingFunction.swift */; };
|
||||
5B7E79CE20CBE69700C50BCF /* masking-path-02-b-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = 5B7E79CC20CBE69600C50BCF /* masking-path-02-b-manual.reference */; };
|
||||
5B7E79CF20CBE69700C50BCF /* masking-path-02-b-manual.svg in Resources */ = {isa = PBXBuildFile; fileRef = 5B7E79CD20CBE69700C50BCF /* masking-path-02-b-manual.svg */; };
|
||||
5B7E79DE20D2781A00C50BCF /* masking-intro-01-f-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = 5B7E79DC20D2781A00C50BCF /* masking-intro-01-f-manual.reference */; };
|
||||
@ -847,6 +849,7 @@
|
||||
5B6E191E20AC58F900454E7E /* Stroke.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stroke.swift; sourceTree = "<group>"; };
|
||||
5B6E191F20AC58F900454E7E /* Color.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = "<group>"; };
|
||||
5B6E192020AC58F900454E7E /* Gradient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Gradient.swift; sourceTree = "<group>"; };
|
||||
5B7D7ED221300D4A00B5ED00 /* TimingFunction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimingFunction.swift; sourceTree = "<group>"; };
|
||||
5B7E79CC20CBE69600C50BCF /* masking-path-02-b-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "masking-path-02-b-manual.reference"; sourceTree = "<group>"; };
|
||||
5B7E79CD20CBE69700C50BCF /* masking-path-02-b-manual.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "masking-path-02-b-manual.svg"; sourceTree = "<group>"; };
|
||||
5B7E79DC20D2781A00C50BCF /* masking-intro-01-f-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "masking-intro-01-f-manual.reference"; sourceTree = "<group>"; };
|
||||
@ -1084,6 +1087,7 @@
|
||||
57E5E0FB1E3B393900D1CB28 /* MorphingGenerator.swift */,
|
||||
57A27BD21E44C5570057BD3A /* ShapeAnimationGenerator.swift */,
|
||||
57E5E0FC1E3B393900D1CB28 /* OpacityGenerator.swift */,
|
||||
5B7D7ED221300D4A00B5ED00 /* TimingFunction.swift */,
|
||||
57E5E0FE1E3B393900D1CB28 /* TransformGenerator.swift */,
|
||||
);
|
||||
path = animation_generators;
|
||||
@ -1970,6 +1974,7 @@
|
||||
57614B181F83D15600875933 /* SVGView.swift in Sources */,
|
||||
57614B191F83D15600875933 /* Arc.swift in Sources */,
|
||||
57614B1A1F83D15600875933 /* MacawView.swift in Sources */,
|
||||
5B7D7ED421300D4A00B5ED00 /* TimingFunction.swift in Sources */,
|
||||
5B6E193420AC58F900454E7E /* Baseline.swift in Sources */,
|
||||
57614B1B1F83D15600875933 /* Image.swift in Sources */,
|
||||
57614B1C1F83D15600875933 /* TransformGenerator.swift in Sources */,
|
||||
@ -2104,6 +2109,7 @@
|
||||
57E5E18B1E3B393900D1CB28 /* Arc.swift in Sources */,
|
||||
57E5E1B21E3B393900D1CB28 /* MacawView.swift in Sources */,
|
||||
57E5E19F1E3B393900D1CB28 /* Image.swift in Sources */,
|
||||
5B7D7ED321300D4A00B5ED00 /* TimingFunction.swift in Sources */,
|
||||
5B6E193320AC58F900454E7E /* Baseline.swift in Sources */,
|
||||
57E5E16A1E3B393900D1CB28 /* TransformGenerator.swift in Sources */,
|
||||
57E5E1551E3B393900D1CB28 /* AnimationImpl.swift in Sources */,
|
||||
|
@ -307,7 +307,7 @@ class AnimationProducer {
|
||||
|
||||
var unionBounds = contentsAnimation.getVFunc()(0.0).group().bounds
|
||||
stride(from: 0.0, to: 1.0, by: 0.02).forEach { progress in
|
||||
let t = animation.easing.progressForTimingFunction(progress: progress)
|
||||
let t = animation.easing.progressFor(time: progress)
|
||||
unionBounds = unionBounds?.union(rect: contentsAnimation.getVFunc()(t).group().bounds!)
|
||||
}
|
||||
|
||||
@ -378,7 +378,7 @@ class AnimationProducer {
|
||||
continue
|
||||
}
|
||||
|
||||
let t = animation.easing.progressForTimingFunction(progress: progress)
|
||||
let t = animation.easing.progressFor(time: progress)
|
||||
group.contents = animation.getVFunc()(t)
|
||||
animation.onProgressUpdate?(progress)
|
||||
|
||||
|
@ -14,7 +14,7 @@ import AppKit
|
||||
|
||||
open class Easing {
|
||||
|
||||
public static let ease: Easing = Ease()
|
||||
public static let ease: Easing = Easing()
|
||||
public static let linear: Easing = Easing()
|
||||
public static let easeIn: Easing = EaseIn()
|
||||
public static let easeOut: Easing = EaseOut()
|
||||
@ -24,44 +24,25 @@ open class Easing {
|
||||
return ElasticInOut(elasticity: elasticity)
|
||||
}
|
||||
|
||||
open func caTimingFunction() -> CAMediaTimingFunction {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
|
||||
}
|
||||
|
||||
open func progressForTimingFunction(progress: Double) -> Double {
|
||||
return progress
|
||||
}
|
||||
}
|
||||
|
||||
private class Ease: Easing {
|
||||
override open func caTimingFunction() -> CAMediaTimingFunction {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
|
||||
open func progressFor(time: Double) -> Double {
|
||||
return time
|
||||
}
|
||||
}
|
||||
|
||||
private class EaseIn: Easing {
|
||||
override open func caTimingFunction() -> CAMediaTimingFunction {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
|
||||
}
|
||||
override open func progressForTimingFunction(progress t: Double) -> Double {
|
||||
override open func progressFor(time t: Double) -> Double {
|
||||
return t * t
|
||||
}
|
||||
}
|
||||
|
||||
private class EaseOut: Easing {
|
||||
override open func caTimingFunction() -> CAMediaTimingFunction {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
|
||||
}
|
||||
override open func progressForTimingFunction(progress t: Double) -> Double {
|
||||
override open func progressFor(time t: Double) -> Double {
|
||||
return -(t * (t - 2))
|
||||
}
|
||||
}
|
||||
|
||||
private class EaseInOut: Easing {
|
||||
override open func caTimingFunction() -> CAMediaTimingFunction {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
|
||||
}
|
||||
override open func progressForTimingFunction(progress t: Double) -> Double {
|
||||
override open func progressFor(time t: Double) -> Double {
|
||||
if t < 0.5 {
|
||||
return 2.0 * t * t
|
||||
} else {
|
||||
@ -77,11 +58,11 @@ public class ElasticInOut: Easing {
|
||||
self.elasticity = elasticity
|
||||
}
|
||||
|
||||
override open func progressForTimingFunction(progress: Double) -> Double {
|
||||
if progress == 0 {
|
||||
override open func progressFor(time: Double) -> Double {
|
||||
if time == 0 {
|
||||
return 0
|
||||
}
|
||||
var t = progress / 0.5
|
||||
var t = time / 0.5
|
||||
if t == 2 {
|
||||
return 1
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ func addMorphingAnimation(_ animation: BasicAnimation, sceneLayer: CALayer, anim
|
||||
renderTransform: layer.renderTransform!)
|
||||
|
||||
generatedAnim.repeatCount = Float(animation.repeatCount)
|
||||
generatedAnim.timingFunction = animation.easing.caTimingFunction()
|
||||
generatedAnim.timingFunction = caTimingFunction(animation.easing)
|
||||
generatedAnim.autoreverses = animation.autoreverses
|
||||
|
||||
generatedAnim.completion = { finished in
|
||||
|
@ -21,7 +21,7 @@ func addOpacityAnimation(_ animation: BasicAnimation, sceneLayer: CALayer, anima
|
||||
offset: animation.pausedProgress,
|
||||
fps: opacityAnimation.logicalFps)
|
||||
generatedAnimation.repeatCount = Float(animation.repeatCount)
|
||||
generatedAnimation.timingFunction = animation.easing.caTimingFunction()
|
||||
generatedAnimation.timingFunction = caTimingFunction(animation.easing)
|
||||
|
||||
generatedAnimation.completion = { finished in
|
||||
|
||||
|
@ -43,7 +43,7 @@ func addShapeAnimation(_ animation: BasicAnimation, sceneLayer: CALayer, animati
|
||||
renderTransform: layer.renderTransform!)
|
||||
|
||||
generatedAnim.repeatCount = Float(animation.repeatCount)
|
||||
generatedAnim.timingFunction = animation.easing.caTimingFunction()
|
||||
generatedAnim.timingFunction = caTimingFunction(animation.easing)
|
||||
generatedAnim.autoreverses = animation.autoreverses
|
||||
|
||||
generatedAnim.completion = { finished in
|
||||
|
@ -0,0 +1,25 @@
|
||||
#if os(iOS)
|
||||
import UIKit
|
||||
#elseif os(OSX)
|
||||
import AppKit
|
||||
#endif
|
||||
|
||||
func caTimingFunction(_ easing: Easing) -> CAMediaTimingFunction {
|
||||
if easing === Easing.ease {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
|
||||
}
|
||||
if easing === Easing.linear {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
|
||||
}
|
||||
if easing === Easing.easeIn {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
|
||||
}
|
||||
if easing === Easing.easeOut {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
|
||||
}
|
||||
if easing === Easing.easeInOut {
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
|
||||
}
|
||||
return CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ func transformAnimationByFunc(_ animation: TransformAnimation, node: Node, durat
|
||||
|
||||
if let trajectory = animation.trajectory {
|
||||
let pathAnimation = CAKeyframeAnimation(keyPath: "position")
|
||||
pathAnimation.timingFunction = animation.easing.caTimingFunction()
|
||||
pathAnimation.timingFunction = caTimingFunction(animation.easing)
|
||||
pathAnimation.duration = duration / 2
|
||||
pathAnimation.autoreverses = animation.autoreverses
|
||||
let value = AnimationUtils.absoluteTransform(node, pos: valueFunc(0), view: view)
|
||||
@ -104,7 +104,7 @@ func transformAnimationByFunc(_ animation: TransformAnimation, node: Node, durat
|
||||
var tValue = Array(stride(from: 0.0, to: 1.0, by: step))
|
||||
tValue.append(1.0)
|
||||
for t in tValue {
|
||||
let progress = animation.easing.progressForTimingFunction(progress: t)
|
||||
let progress = animation.easing.progressFor(time: t)
|
||||
let value = AnimationUtils.absoluteTransform(node, pos: valueFunc(offset + progress), view: view)
|
||||
let cgValue = CATransform3DMakeAffineTransform(value.toCG())
|
||||
transformValues.append(cgValue)
|
||||
|
Loading…
Reference in New Issue
Block a user