Commit ee27036f by Daniel Dahan

development: updated rotate function in Motion library

parent 8836c5d4
......@@ -204,7 +204,10 @@ extension CALayer {
case let .transform(transform):
a.append(Motion.transform(transform: transform))
case let .rotate(angle):
a.append(Motion.rotate(angle: angle))
let rotate = Motion.rotate(angle: angle)
let radians = CGFloat(atan2f(Float(s.affineTransform().b), Float(s.affineTransform().a)))
rotate.fromValue = radians * 180 / CGFloat(M_PI)
a.append(rotate)
case let .rotateX(angle):
a.append(Motion.rotateX(angle: angle))
case let .rotateY(angle):
......@@ -287,11 +290,119 @@ extension UIView {
}
open func motion(_ animations: MotionAnimation...) {
layer.motion(animations)
motion(animations)
}
open func motion(_ animations: [MotionAnimation]) {
layer.motion(animations)
motion(delay: 0, duration: 0.25, timingFunction: .easeInEaseOut, animations: animations)
}
fileprivate func motion(delay: TimeInterval, duration: TimeInterval, timingFunction: MotionAnimationTimingFunction, animations: [MotionAnimation]) {
var t = delay
var w: CGFloat = 0
var h: CGFloat = 0
for v in animations {
switch v {
case let .delay(time):
t = time
case let .width(width):
w = width
case let .height(height):
h = height
default:break
}
}
Motion.delay(t) { [weak self] in
guard let s = self else {
return
}
var a = [CABasicAnimation]()
var tf = timingFunction
var d = duration
for v in animations {
switch v {
case let .timingFunction(timingFunction):
tf = timingFunction
case let .duration(duration):
d = duration
case let .custom(animation):
a.append(animation)
case let .backgroundColor(color):
a.append(Motion.background(color: color))
case let .corners(radius):
a.append(Motion.corner(radius: radius))
case let .transform(transform):
a.append(Motion.transform(transform: transform))
case let .rotate(angle):
let rotate = Motion.rotate(angle: angle)
let radians = CGFloat(atan2f(Float(s.transform.b), Float(s.transform.a)))
rotate.fromValue = (radians * (180 / CGFloat(M_PI))) as NSNumber
a.append(rotate)
case let .rotateX(angle):
a.append(Motion.rotateX(angle: angle))
case let .rotateY(angle):
a.append(Motion.rotateY(angle: angle))
case let .rotateZ(angle):
a.append(Motion.rotateZ(angle: angle))
case let .spin(rotations):
a.append(Motion.spin(rotations: rotations))
case let .spinX(rotations):
a.append(Motion.spinX(rotations: rotations))
case let .spinY(rotations):
a.append(Motion.spinY(rotations: rotations))
case let .spinZ(rotations):
a.append(Motion.spinZ(rotations: rotations))
case let .scale(to):
a.append(Motion.scale(to: to))
case let .scaleX(to):
a.append(Motion.scaleX(to: to))
case let .scaleY(to):
a.append(Motion.scaleY(to: to))
case let .scaleZ(to):
a.append(Motion.scaleZ(to: to))
case let .translate(x, y):
a.append(Motion.translate(to: CGPoint(x: x, y: y)))
case let .translateX(to):
a.append(Motion.translateX(to: to))
case let .translateY(to):
a.append(Motion.translateY(to: to))
case let .translateZ(to):
a.append(Motion.translateZ(to: to))
case let .x(x):
a.append(Motion.position(to: CGPoint(x: x + w / 2, y: s.position.y)))
case let .y(y):
a.append(Motion.position(to: CGPoint(x: s.position.x, y: y + h / 2)))
case let .position(x, y):
a.append(Motion.position(to: CGPoint(x: x, y: y)))
case let .shadow(path):
a.append(Motion.shadow(path: path))
case let .fade(opacity):
let fade = Motion.fade(opacity: opacity)
fade.fromValue = s.value(forKeyPath: MotionAnimationKeyPath.opacity.rawValue) ?? NSNumber(floatLiteral: 1)
a.append(fade)
case let .zPosition(index):
let zPosition = Motion.zPosition(index: index)
zPosition.fromValue = s.value(forKeyPath: MotionAnimationKeyPath.zPosition.rawValue) ?? NSNumber(integerLiteral: 0)
a.append(zPosition)
case let .width(w):
a.append(Motion.width(w))
case let .height(h):
a.append(Motion.height(h))
default:break
}
}
let g = Motion.animate(group: a, duration: d)
g.fillMode = MotionAnimationFillModeToValue(mode: .forwards)
g.isRemovedOnCompletion = false
g.timingFunction = MotionAnimationTimingFunctionToValue(timingFunction: tf)
s.animate(g)
}
}
}
......
......@@ -128,14 +128,14 @@ open class MotionTransitionPresentationController: UIPresentationController {
}
presentedViewController.transitionCoordinator?.animate(alongsideTransition: { (context) in
print("Animating")
// print("Animating")
})
print("presentationTransitionWillBegin")
// print("presentationTransitionWillBegin")
}
open override func presentationTransitionDidEnd(_ completed: Bool) {
print("presentationTransitionDidEnd")
// print("presentationTransitionDidEnd")
}
open override func dismissalTransitionWillBegin() {
......@@ -144,14 +144,14 @@ open class MotionTransitionPresentationController: UIPresentationController {
}
presentedViewController.transitionCoordinator?.animate(alongsideTransition: { (context) in
print("Animating")
// print("Animating")
})
print("dismissalTransitionWillBegin")
// print("dismissalTransitionWillBegin")
}
open override func dismissalTransitionDidEnd(_ completed: Bool) {
print("dismissalTransitionDidEnd")
// print("dismissalTransitionDidEnd")
}
open override var frameOfPresentedViewInContainerView: CGRect {
......@@ -185,7 +185,7 @@ open class MotionTransitionDelegate: NSObject {
}
open func animationEnded(_ transitionCompleted: Bool) {
print("MotionTransitionAnimator", #function)
// print("MotionTransitionAnimator", #function)
}
}
......@@ -291,7 +291,7 @@ open class MotionTransitionInteractiveDelegate: UIPercentDrivenInteractiveTransi
}
open func animationEnded(_ transitionCompleted: Bool) {
print("MotionTransitionAnimator", #function)
// print("MotionTransitionAnimator", #function)
}
}
......@@ -427,21 +427,57 @@ open class MotionTransitionPresentedAnimator: MotionTransitionDelegate, UIViewCo
if 0 < v.transitionIdentifier.utf16.count {
for v2 in fromViewController.view.subviews {
if v.transitionIdentifier == v2.transitionIdentifier {
var d: TimeInterval = 0
var a = [CABasicAnimation]()
var tf = MotionAnimationTimingFunction.easeInEaseOut
for ta in v.transitionAnimations {
switch ta {
case let .delay(time):
if time > delay {
delay = time
}
d = time
case let .duration(time):
if time > duration {
duration = time
}
case let .timingFunction(timingFunction):
tf = timingFunction
case let .rotate(angle):
let rotate = Motion.rotate(angle: angle)
let radians = CGFloat(atan2f(Float(v2.transform.b), Float(v2.transform.a)))
rotate.fromValue = v2.layer.value(forKeyPath: MotionAnimationKeyPath.rotation.rawValue)
a.append(rotate)
case let .backgroundColor(color):
a.append(Motion.background(color: color))
case let .corners(radius):
a.append(Motion.corner(radius: radius))
case let .x(x):
a.append(Motion.position(to: CGPoint(x: x + v.bounds.width / 2, y: v.position.y)))
case let .y(y):
a.append(Motion.position(to: CGPoint(x: v.position.x, y: y + v.bounds.height / 2)))
case let .position(x, y):
a.append(Motion.position(to: CGPoint(x: x, y: y)))
case let .shadow(path):
a.append(Motion.shadow(path: path))
case let .width(w):
a.append(Motion.width(w))
case let .height(h):
a.append(Motion.height(h))
default:break
}
}
v.motion(v.transitionAnimations)
Motion.delay(d) {
let g = Motion.animate(group: a, duration: duration)
g.fillMode = MotionAnimationFillModeToValue(mode: .forwards)
g.isRemovedOnCompletion = false
g.timingFunction = MotionAnimationTimingFunctionToValue(timingFunction: tf)
v.animate(g)
}
}
}
}
......@@ -511,6 +547,11 @@ open class MotionTransitionDismissedAnimator: MotionTransitionDelegate, UIViewCo
}
case let .timingFunction(timingFunction):
tf = timingFunction
case let .rotate(angle):
let radians = CGFloat(atan2f(Float(v2.transform.b), Float(v2.transform.a)))
let rotate = Motion.rotate(angle: radians * 180 / CGFloat(M_PI))
rotate.fromValue = v.layer.value(forKeyPath: MotionAnimationKeyPath.rotation.rawValue)
a.append(rotate)
case let .backgroundColor(color):
a.append(Motion.background(color: v2.backgroundColor ?? .clear))
case let .corners(radius):
......@@ -544,7 +585,6 @@ open class MotionTransitionDismissedAnimator: MotionTransitionDelegate, UIViewCo
}
}
print("DELAY", delay + duration)
Motion.delay(delay + duration) {
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
......@@ -587,7 +627,7 @@ open class FadeMotionTransition: NSObject, UIViewControllerAnimatedTransitioning
}
open func animationEnded(_ transitionCompleted: Bool) {
print("FadeMotionTransition ANIMATION ENDED")
// print("FadeMotionTransition ANIMATION ENDED")
}
}
......@@ -662,7 +702,7 @@ open class SlideMotionTransition: NSObject, UIViewControllerAnimatedTransitionin
}
open func animationEnded(_ transitionCompleted: Bool) {
print("SlideMotionTransition ANIMATION ENDED")
// print("SlideMotionTransition ANIMATION ENDED")
}
}
......
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