Commit 601c787a by Daniel Dahan

minor cleanup

parent 7f734fe0
...@@ -145,6 +145,7 @@ ...@@ -145,6 +145,7 @@
965FE9781FE1D8120098BDD0 /* Transition */ = { 965FE9781FE1D8120098BDD0 /* Transition */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
965FE9641FDCCE910098BDD0 /* MotionProgressRunner.swift */,
965FE9791FE1D83D0098BDD0 /* MotionTransition.swift */, 965FE9791FE1D83D0098BDD0 /* MotionTransition.swift */,
965FE9661FDD99800098BDD0 /* MotionTransition+Start.swift */, 965FE9661FDD99800098BDD0 /* MotionTransition+Start.swift */,
965FE96E1FDEFA8B0098BDD0 /* MotionTransition+Animate.swift */, 965FE96E1FDEFA8B0098BDD0 /* MotionTransition+Animate.swift */,
...@@ -181,7 +182,6 @@ ...@@ -181,7 +182,6 @@
96E409BC1F24FC300015A2B5 /* LICENSE */, 96E409BC1F24FC300015A2B5 /* LICENSE */,
96E4094F1F24F7370015A2B5 /* Motion.h */, 96E4094F1F24F7370015A2B5 /* Motion.h */,
965FE9681FDDA1F20098BDD0 /* MotionViewOrderStrategy.swift */, 965FE9681FDDA1F20098BDD0 /* MotionViewOrderStrategy.swift */,
965FE9641FDCCE910098BDD0 /* MotionProgressRunner.swift */,
96E409511F24F7370015A2B5 /* MotionAnimation.swift */, 96E409511F24F7370015A2B5 /* MotionAnimation.swift */,
96E409521F24F7370015A2B5 /* MotionAnimationState.swift */, 96E409521F24F7370015A2B5 /* MotionAnimationState.swift */,
96E409531F24F7370015A2B5 /* MotionCAAnimation.swift */, 96E409531F24F7370015A2B5 /* MotionCAAnimation.swift */,
......
...@@ -37,39 +37,39 @@ class MotionProgressRunner { ...@@ -37,39 +37,39 @@ class MotionProgressRunner {
weak var delegate: MotionProgressRunnerDelegate? weak var delegate: MotionProgressRunnerDelegate?
var isRunning: Bool { var isRunning: Bool {
return displayLink != nil return nil != displayLink
} }
internal var timePassed: TimeInterval = 0 internal var progress: TimeInterval = 0
internal var duration: TimeInterval = 0 internal var duration: TimeInterval = 0
internal var displayLink: CADisplayLink? internal var displayLink: CADisplayLink?
internal var isReversed: Bool = false internal var isReversed: Bool = false
@objc @objc
func displayUpdate(_ link: CADisplayLink) { func displayUpdate(_ link: CADisplayLink) {
timePassed += isReversed ? -link.duration : link.duration progress += isReversed ? -link.duration : link.duration
if isReversed, timePassed <= 1.0 / 120 { if isReversed, progress <= 1.0 / 120 {
delegate?.complete(isFinishing: false) delegate?.complete(isFinishing: false)
stop() stop()
return return
} }
if !isReversed, timePassed > duration - 1.0 / 120 { if !isReversed, progress > duration - 1.0 / 120 {
delegate?.complete(isFinishing: true) delegate?.complete(isFinishing: true)
stop() stop()
return return
} }
delegate?.update(progress: timePassed / duration) delegate?.update(progress: progress / duration)
} }
func start(timePassed: TimeInterval, totalTime: TimeInterval, reverse: Bool) { func start(progress: TimeInterval, duration: TimeInterval, isReversed: Bool) {
stop() stop()
self.timePassed = timePassed self.progress = progress
self.isReversed = reverse self.isReversed = isReversed
self.duration = totalTime self.duration = duration
displayLink = CADisplayLink(target: self, selector: #selector(displayUpdate(_:))) displayLink = CADisplayLink(target: self, selector: #selector(displayUpdate(_:)))
displayLink!.add(to: RunLoop.main, forMode: RunLoopMode(rawValue: RunLoopMode.commonModes.rawValue)) displayLink!.add(to: RunLoop.main, forMode: RunLoopMode(rawValue: RunLoopMode.commonModes.rawValue))
......
...@@ -31,27 +31,6 @@ import UIKit ...@@ -31,27 +31,6 @@ import UIKit
extension MotionTransition { extension MotionTransition {
/** /**
Complete the transition. Complete the transition.
- Parameter after: A TimeInterval.
- Parameter isFinishing: A Boolean indicating if the transition
has completed.
*/
func complete(after: TimeInterval, isFinishing: Bool) {
guard [MotionTransitionState.animating, .starting, .notified].contains(state) else {
return
}
if after <= 1.0 / 120 {
complete(isFinishing: isFinishing)
return
}
let totalTime = after / (isFinishing ? max((1 - progress), 0.01) : max(progress, 0.01))
progressRunner.start(timePassed: progress * totalTime, totalTime: totalTime, reverse: !isFinishing)
}
/**
Complete the transition.
- Parameter isFinishing: A Boolean indicating if the transition - Parameter isFinishing: A Boolean indicating if the transition
has completed. has completed.
*/ */
......
...@@ -402,6 +402,27 @@ open class MotionTransition: NSObject { ...@@ -402,6 +402,27 @@ open class MotionTransition: NSObject {
internal override init() { internal override init() {
super.init() super.init()
} }
/**
Complete the transition.
- Parameter after: A TimeInterval.
- Parameter isFinishing: A Boolean indicating if the transition
has completed.
*/
func complete(after: TimeInterval, isFinishing: Bool) {
guard [MotionTransitionState.animating, .starting, .notified].contains(state) else {
return
}
if after <= 1.0 / 120 {
complete(isFinishing: isFinishing)
return
}
let duration = after / (isFinishing ? max((1 - progress), 0.01) : max(progress, 0.01))
progressRunner.start(progress: progress * duration, duration: duration, isReversed: !isFinishing)
}
} }
extension MotionTransition: MotionProgressRunnerDelegate { extension MotionTransition: MotionProgressRunnerDelegate {
...@@ -529,12 +550,12 @@ internal extension MotionTransition { ...@@ -529,12 +550,12 @@ internal extension MotionTransition {
tvc.beginAppearanceTransition(true, animated: true) tvc.beginAppearanceTransition(true, animated: true)
processForMotionDelegate(viewController: fvc) { [weak self] in processForMotionDelegate(viewController: fvc) { [weak self] in
guard let s = self else { guard let `self` = self else {
return return
} }
$0.motion?(motion: s, willStartTransitionTo: tvc) $0.motion?(motion: self, willStartTransitionTo: tvc)
$0.motionWillStartTransition?(motion: s) $0.motionWillStartTransition?(motion: self)
} }
processForMotionDelegate(viewController: tvc) { [weak self] in processForMotionDelegate(viewController: tvc) { [weak self] in
...@@ -566,21 +587,21 @@ internal extension MotionTransition { ...@@ -566,21 +587,21 @@ internal extension MotionTransition {
fvc.endAppearanceTransition() fvc.endAppearanceTransition()
processForMotionDelegate(viewController: fvc) { [weak self] in processForMotionDelegate(viewController: fvc) { [weak self] in
guard let s = self else { guard let `self` = self else {
return return
} }
$0.motion?(motion: s, didEndTransitionTo: tvc) $0.motion?(motion: self, didEndTransitionTo: tvc)
$0.motionDidEndTransition?(motion: s) $0.motionDidEndTransition?(motion: self)
} }
processForMotionDelegate(viewController: tvc) { [weak self] in processForMotionDelegate(viewController: tvc) { [weak self] in
guard let s = self else { guard let `self` = self else {
return return
} }
$0.motion?(motion: s, didEndTransitionFrom: fvc) $0.motion?(motion: self, didEndTransitionFrom: fvc)
$0.motionDidEndTransition?(motion: s) $0.motionDidEndTransition?(motion: self)
} }
transitionContext?.finishInteractiveTransition() transitionContext?.finishInteractiveTransition()
...@@ -605,21 +626,21 @@ internal extension MotionTransition { ...@@ -605,21 +626,21 @@ internal extension MotionTransition {
fvc.endAppearanceTransition() fvc.endAppearanceTransition()
processForMotionDelegate(viewController: fvc) { [weak self] in processForMotionDelegate(viewController: fvc) { [weak self] in
guard let s = self else { guard let `self` = self else {
return return
} }
$0.motion?(motion: s, didCancelTransitionTo: tvc) $0.motion?(motion: self, didCancelTransitionTo: tvc)
$0.motionDidCancelTransition?(motion: s) $0.motionDidCancelTransition?(motion: self)
} }
processForMotionDelegate(viewController: tvc) { [weak self] in processForMotionDelegate(viewController: tvc) { [weak self] in
guard let s = self else { guard let `self` = self else {
return return
} }
$0.motion?(motion: s, didCancelTransitionFrom: fvc) $0.motion?(motion: self, didCancelTransitionFrom: fvc)
$0.motionDidCancelTransition?(motion: s) $0.motionDidCancelTransition?(motion: self)
} }
transitionContext?.finishInteractiveTransition() transitionContext?.finishInteractiveTransition()
......
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