Commit bd63f110 by Daniel Dahan

development: added timingFunction parameter to Motion

parent 1a9cb2c5
......@@ -146,6 +146,22 @@ extension CALayer {
}
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]()
for v in animations {
......@@ -203,7 +219,7 @@ extension CALayer {
let g = Motion.animate(group: a, duration: duration)
g.fillMode = AnimationFillModeToValue(mode: .forwards)
g.isRemovedOnCompletion = false
g.timingFunction = AnimationTimingFunctionToValue(function: .easeInEaseOut)
g.timingFunction = MotionAnimationTimingFunctionToValue(timingFunction: timingFunction)
animate(animation: g)
}
......@@ -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...) {
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]) {
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
guard let s = self else {
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 {
}
}
@objc(AnimationTimingFunction)
public enum AnimationTimingFunction: Int {
@objc(MotionAnimationTimingFunction)
public enum MotionAnimationTimingFunction: Int {
case `default`
case linear
case easeIn
......@@ -65,12 +65,12 @@ public enum AnimationTimingFunction: Int {
}
/**
Converts the AnimationTimingFunction enum value to a corresponding CAMediaTimingFunction.
- Parameter function: An AnimationTimingFunction enum value.
Converts the MotionAnimationTimingFunction enum value to a corresponding CAMediaTimingFunction.
- Parameter function: An MotionAnimationTimingFunction enum value.
- Returns: A CAMediaTimingFunction.
*/
public func AnimationTimingFunctionToValue(function: AnimationTimingFunction) -> CAMediaTimingFunction {
switch function {
public func MotionAnimationTimingFunctionToValue(timingFunction: MotionAnimationTimingFunction) -> CAMediaTimingFunction {
switch timingFunction {
case .default:
return CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
case .linear:
......@@ -140,15 +140,15 @@ public struct Motion {
Runs an animation with a specified duration.
- Parameter duration: An animation duration time.
- Parameter animations: An animation block.
- Parameter timingFunction: An AnimationTimingFunction value.
- Parameter timingFunction: An MotionAnimationTimingFunction value.
- Parameter completion: A completion block that is executed once
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.setAnimationDuration(duration)
CATransaction.setCompletionBlock(completion)
CATransaction.setAnimationTimingFunction(AnimationTimingFunctionToValue(function: .easeInEaseOut))
CATransaction.setAnimationTimingFunction(MotionAnimationTimingFunctionToValue(timingFunction: timingFunction))
animations()
CATransaction.commit()
}
......@@ -156,17 +156,17 @@ public struct Motion {
/**
Creates a CAAnimationGroup.
- 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.
- 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()
group.fillMode = AnimationFillModeToValue(mode: .forwards)
group.isRemovedOnCompletion = false
group.animations = animations
group.duration = duration
group.timingFunction = AnimationTimingFunctionToValue(function: timingFunction)
group.timingFunction = MotionAnimationTimingFunctionToValue(timingFunction: timingFunction)
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