Commit bd63f110 by Daniel Dahan

development: added timingFunction parameter to Motion

parent 1a9cb2c5
...@@ -146,6 +146,22 @@ extension CALayer { ...@@ -146,6 +146,22 @@ extension CALayer {
} }
open func motion(duration: TimeInterval, animations: [MotionAnimation]) { open func motion(duration: TimeInterval, animations: [MotionAnimation]) {
motion(duration: duration, timingFunction: .easeInEaseOut, animations: animations)
}
open func motion(timingFunction: MotionAnimationTimingFunction, animations: MotionAnimation...) {
motion(timingFunction: timingFunction, animations: animations)
}
open func motion(timingFunction: MotionAnimationTimingFunction, animations: [MotionAnimation]) {
motion(duration: 0.15, animations: animations)
}
open func motion(duration: TimeInterval, timingFunction: MotionAnimationTimingFunction, animations: MotionAnimation...) {
motion(duration: duration, timingFunction: timingFunction, animations: animations)
}
open func motion(duration: TimeInterval, timingFunction: MotionAnimationTimingFunction, animations: [MotionAnimation]) {
var a = [CABasicAnimation]() var a = [CABasicAnimation]()
for v in animations { for v in animations {
...@@ -203,7 +219,7 @@ extension CALayer { ...@@ -203,7 +219,7 @@ extension CALayer {
let g = Motion.animate(group: a, duration: duration) let g = Motion.animate(group: a, duration: duration)
g.fillMode = AnimationFillModeToValue(mode: .forwards) g.fillMode = AnimationFillModeToValue(mode: .forwards)
g.isRemovedOnCompletion = false g.isRemovedOnCompletion = false
g.timingFunction = AnimationTimingFunctionToValue(function: .easeInEaseOut) g.timingFunction = MotionAnimationTimingFunctionToValue(timingFunction: timingFunction)
animate(animation: g) animate(animation: g)
} }
...@@ -222,17 +238,33 @@ extension CALayer { ...@@ -222,17 +238,33 @@ extension CALayer {
} }
} }
open func motion(delay: TimeInterval, timingFunction: MotionAnimationTimingFunction, animations: MotionAnimation...) {
motion(delay: delay, timingFunction: timingFunction, animations: animations)
}
open func motion(delay: TimeInterval, timingFunction: MotionAnimationTimingFunction, animations: [MotionAnimation]) {
motion(delay: delay, timingFunction: timingFunction, animations: animations)
}
open func motion(delay: TimeInterval, duration: TimeInterval, animations: MotionAnimation...) { open func motion(delay: TimeInterval, duration: TimeInterval, animations: MotionAnimation...) {
motion(delay: delay, duration: duration, animations: animations) motion(delay: delay, duration: duration, timingFunction: .easeInEaseOut, animations: animations)
} }
open func motion(delay: TimeInterval, duration: TimeInterval, animations: [MotionAnimation]) { open func motion(delay: TimeInterval, duration: TimeInterval, animations: [MotionAnimation]) {
motion(delay: delay, duration: duration, timingFunction: .easeInEaseOut, animations: animations)
}
open func motion(delay: TimeInterval, duration: TimeInterval, timingFunction: MotionAnimationTimingFunction, animations: MotionAnimation...) {
motion(delay: delay, duration: duration, timingFunction: timingFunction, animations: animations)
}
open func motion(delay: TimeInterval, duration: TimeInterval, timingFunction: MotionAnimationTimingFunction, animations: [MotionAnimation]) {
Motion.delay(time: delay) { [weak self] in Motion.delay(time: delay) { [weak self] in
guard let s = self else { guard let s = self else {
return return
} }
s.motion(duration: duration, animations: animations) s.motion(duration: duration, timingFunction: timingFunction, animations: animations)
} }
} }
} }
......
...@@ -55,8 +55,8 @@ public func AnimationFillModeToValue(mode: AnimationFillMode) -> String { ...@@ -55,8 +55,8 @@ public func AnimationFillModeToValue(mode: AnimationFillMode) -> String {
} }
} }
@objc(AnimationTimingFunction) @objc(MotionAnimationTimingFunction)
public enum AnimationTimingFunction: Int { public enum MotionAnimationTimingFunction: Int {
case `default` case `default`
case linear case linear
case easeIn case easeIn
...@@ -65,12 +65,12 @@ public enum AnimationTimingFunction: Int { ...@@ -65,12 +65,12 @@ public enum AnimationTimingFunction: Int {
} }
/** /**
Converts the AnimationTimingFunction enum value to a corresponding CAMediaTimingFunction. Converts the MotionAnimationTimingFunction enum value to a corresponding CAMediaTimingFunction.
- Parameter function: An AnimationTimingFunction enum value. - Parameter function: An MotionAnimationTimingFunction enum value.
- Returns: A CAMediaTimingFunction. - Returns: A CAMediaTimingFunction.
*/ */
public func AnimationTimingFunctionToValue(function: AnimationTimingFunction) -> CAMediaTimingFunction { public func MotionAnimationTimingFunctionToValue(timingFunction: MotionAnimationTimingFunction) -> CAMediaTimingFunction {
switch function { switch timingFunction {
case .default: case .default:
return CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault) return CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
case .linear: case .linear:
...@@ -140,15 +140,15 @@ public struct Motion { ...@@ -140,15 +140,15 @@ public struct Motion {
Runs an animation with a specified duration. Runs an animation with a specified duration.
- Parameter duration: An animation duration time. - Parameter duration: An animation duration time.
- Parameter animations: An animation block. - Parameter animations: An animation block.
- Parameter timingFunction: An AnimationTimingFunction value. - Parameter timingFunction: An MotionAnimationTimingFunction value.
- Parameter completion: A completion block that is executed once - Parameter completion: A completion block that is executed once
the animations have completed. the animations have completed.
*/ */
public static func animate(duration: CFTimeInterval, timingFunction: AnimationTimingFunction = .easeInEaseOut, animations: (() -> Void), completion: (() -> Void)? = nil) { public static func animate(duration: CFTimeInterval, timingFunction: MotionAnimationTimingFunction = .easeInEaseOut, animations: (() -> Void), completion: (() -> Void)? = nil) {
CATransaction.begin() CATransaction.begin()
CATransaction.setAnimationDuration(duration) CATransaction.setAnimationDuration(duration)
CATransaction.setCompletionBlock(completion) CATransaction.setCompletionBlock(completion)
CATransaction.setAnimationTimingFunction(AnimationTimingFunctionToValue(function: .easeInEaseOut)) CATransaction.setAnimationTimingFunction(MotionAnimationTimingFunctionToValue(timingFunction: timingFunction))
animations() animations()
CATransaction.commit() CATransaction.commit()
} }
...@@ -156,17 +156,17 @@ public struct Motion { ...@@ -156,17 +156,17 @@ public struct Motion {
/** /**
Creates a CAAnimationGroup. Creates a CAAnimationGroup.
- Parameter animations: An Array of CAAnimation objects. - Parameter animations: An Array of CAAnimation objects.
- Parameter timingFunction: An AnimationTimingFunction value. - Parameter timingFunction: An MotionAnimationTimingFunction value.
- Parameter duration: An animation duration time for the group. - Parameter duration: An animation duration time for the group.
- Returns: A CAAnimationGroup. - Returns: A CAAnimationGroup.
*/ */
public static func animate(group animations: [CAAnimation], timingFunction: AnimationTimingFunction = .easeInEaseOut, duration: CFTimeInterval = 0.5) -> CAAnimationGroup { public static func animate(group animations: [CAAnimation], timingFunction: MotionAnimationTimingFunction = .easeInEaseOut, duration: CFTimeInterval = 0.5) -> CAAnimationGroup {
let group = CAAnimationGroup() let group = CAAnimationGroup()
group.fillMode = AnimationFillModeToValue(mode: .forwards) group.fillMode = AnimationFillModeToValue(mode: .forwards)
group.isRemovedOnCompletion = false group.isRemovedOnCompletion = false
group.animations = animations group.animations = animations
group.duration = duration group.duration = duration
group.timingFunction = AnimationTimingFunctionToValue(function: timingFunction) group.timingFunction = MotionAnimationTimingFunctionToValue(timingFunction: timingFunction)
return group return group
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment