From cbe6365985b3a6563cc9410e178ccef1ecea2f0d Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Sat, 25 Mar 2017 09:29:55 -0700 Subject: [PATCH 01/30] WIP of tracer. --- examples/MaterialExpansionExample.swift | 2 + src/MotionRuntime.swift | 86 +++++++++++++++++++ src/debugging/Metadata.swift | 15 +++- .../coreAnimationPathTweenToStream.swift | 2 +- src/systems/coreAnimationSpringToStream.swift | 2 +- src/systems/coreAnimationTweenToStream.swift | 2 +- 6 files changed, 104 insertions(+), 5 deletions(-) diff --git a/examples/MaterialExpansionExample.swift b/examples/MaterialExpansionExample.swift index f76b738..9ec569c 100644 --- a/examples/MaterialExpansionExample.swift +++ b/examples/MaterialExpansionExample.swift @@ -89,6 +89,8 @@ class MaterialExpansionExampleViewController: ExampleViewController { // Ensure that our mask always tracks the square. runtime.connect(runtime.get(square.layer).width, to: runtime.get(mask).width) runtime.connect(runtime.get(square.layer).height, to: runtime.get(mask).height) + + runtime.dumpTree() } override func exampleInformation() -> ExampleInfo { diff --git a/src/MotionRuntime.swift b/src/MotionRuntime.swift index ea37d77..daa78e1 100644 --- a/src/MotionRuntime.swift +++ b/src/MotionRuntime.swift @@ -37,6 +37,9 @@ public final class MotionRuntime { */ public init(containerView: UIView) { self.containerView = containerView + + let longpress = UILongPressGestureRecognizer(target: self, action: #selector(didLongPress)) + self.containerView.addGestureRecognizer(longpress) } /** @@ -61,8 +64,10 @@ public final class MotionRuntime { runtime. */ public func add(_ interaction: I, to target: I.Target, constraints: I.Constraints? = nil) { + interactionStack.append(Metadata("\(type(of: interaction))", type: .interaction, args: [target])) interaction.add(to: target, withRuntime: self, constraints: constraints) interactions.append(interaction) + interactionStack.removeLast() } /** @@ -187,7 +192,88 @@ public final class MotionRuntime { return lines.joined(separator: "\n") } + private class InteractionNode { + var this: Metadata + init(_ metadata: Metadata = Metadata("Runtime", type: .interaction)) { + self.this = metadata + } + var properties: [Metadata] = [] + var children: [Metadata: InteractionNode] = [:] + + func sortedChildren() -> [Metadata] { + if let sortedChildren = _sortedChildren { + return sortedChildren + } + + let sorted = children.keys.sorted(by: { $0.name < $1.name }) + _sortedChildren = sorted + return sorted + } + private var _sortedChildren: [Metadata]? + } + private var interactionTree = InteractionNode() + private var interactionStack: [Metadata] = [] + + public func dumpTree() { + dump(interactionTree) + } + + @objc private func didLongPress(_ gesture: UILongPressGestureRecognizer) { + let view = DebugView(frame: .init(origin: .init(x: 0, y: containerView.bounds.height * 2 / 3), size: .init(width: containerView.bounds.width, height: containerView.bounds.height / 3)), tree: interactionTree) + view.autoresizingMask = [.flexibleTopMargin, .flexibleWidth] + containerView.addSubview(view) + } + + private class DebugView: UIView, UITableViewDataSource { + let tree: InteractionNode + + init(frame: CGRect, tree: InteractionNode) { + self.tree = tree + + super.init(frame: frame) + + backgroundColor = .white + + let tableView = UITableView(frame: bounds, style: .grouped) + tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + tableView.dataSource = self + tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") + addSubview(tableView) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return tree.children.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) + cell.textLabel?.text = tree.sortedChildren()[indexPath.row].label + return cell + } + } + private func write(_ stream: O, to property: ReactiveProperty) where O.T == T { + var node: InteractionNode = interactionTree + for interaction in interactionStack { + if let child = node.children[interaction] { + node = child + } else { + let child = InteractionNode(interaction) + node.children[interaction] = child + node = child + } + } + // TODO: Extract all properties that are backing this stream and add them to this interaction. + // Need to walk up the stream's metadata recursively. + metadata.append(stream.metadata.createChild(property.metadata)) subscriptions.append(stream.subscribe(next: { property.value = $0 }, coreAnimation: property.coreAnimation, diff --git a/src/debugging/Metadata.swift b/src/debugging/Metadata.swift index e79576d..247d242 100644 --- a/src/debugging/Metadata.swift +++ b/src/debugging/Metadata.swift @@ -21,10 +21,11 @@ public protocol Inspectable { var metadata: Metadata { get } } -public final class Metadata: CustomDebugStringConvertible { +public final class Metadata: CustomDebugStringConvertible, Hashable { enum Metatype { case node case constraint + case interaction case property case constant } @@ -62,7 +63,9 @@ public final class Metadata: CustomDebugStringConvertible { private var style: String { switch type { case .constraint: - return "style=filled, fillcolor=\"#FF80AB\"" + return "style=filled, fillcolor=\"#C51162\"" + case .interaction: + return "style=filled, fillcolor=\"#C51162\"" case .node: return "style=filled, fillcolor=\"#FFFFFF\"" case .property: @@ -120,6 +123,14 @@ public final class Metadata: CustomDebugStringConvertible { return description.joined(separator: "\n").replacingOccurrences(of: "MaterialMotion.", with: "") } + + public var hashValue: Int { + return name.hashValue + } + + static public func ==(lhs: Metadata, rhs: Metadata) -> Bool { + return lhs.name == rhs.name + } } func pretty(_ object: Any) -> String { diff --git a/src/systems/coreAnimationPathTweenToStream.swift b/src/systems/coreAnimationPathTweenToStream.swift index 5f88386..e69065e 100644 --- a/src/systems/coreAnimationPathTweenToStream.swift +++ b/src/systems/coreAnimationPathTweenToStream.swift @@ -20,7 +20,7 @@ import IndefiniteObservable /** Create a core animation tween system for a Tween plan. */ public func coreAnimation(_ tween: PathTweenShadow) -> MotionObservable { - return MotionObservable(Metadata("Core Animation Path Tween", args: [tween.duration, tween.delay, tween.path, tween.timeline as Any, tween.enabled, tween.state])) { observer in + return MotionObservable(Metadata("Core Animation Path Tween", type: .interaction, args: [tween.duration, tween.delay, tween.path, tween.timeline as Any, tween.enabled, tween.state])) { observer in var subscriptions: [Subscription] = [] let key = NSUUID().uuidString diff --git a/src/systems/coreAnimationSpringToStream.swift b/src/systems/coreAnimationSpringToStream.swift index 1a7bb51..0cb2117 100644 --- a/src/systems/coreAnimationSpringToStream.swift +++ b/src/systems/coreAnimationSpringToStream.swift @@ -24,7 +24,7 @@ import UIKit */ public func coreAnimation(_ spring: SpringShadow) -> (MotionObservable) where T: Subtractable { let initialVelocityStream = spring.initialVelocity.asStream() - return MotionObservable(Metadata("Core Animation Spring", args: [spring.enabled, spring.state, spring.initialValue, spring.initialVelocity, spring.destination, spring.tension, spring.friction, spring.mass, spring.suggestedDuration, spring.threshold])) { observer in + return MotionObservable(Metadata("Core Animation Spring", type: .interaction, args: [spring.enabled, spring.state, spring.initialValue, spring.initialVelocity, spring.destination, spring.tension, spring.friction, spring.mass, spring.suggestedDuration, spring.threshold])) { observer in var animationKeys: [String] = [] var to: T? diff --git a/src/systems/coreAnimationTweenToStream.swift b/src/systems/coreAnimationTweenToStream.swift index e455972..4d7dee4 100644 --- a/src/systems/coreAnimationTweenToStream.swift +++ b/src/systems/coreAnimationTweenToStream.swift @@ -35,7 +35,7 @@ public func coreAnimation(_ tween: TweenShadow) -> MotionObservable whe } private func streamFromTween(_ tween: TweenShadow, configureEvent: @escaping (CoreAnimationChannelAdd) -> CoreAnimationChannelAdd) -> MotionObservable { - return MotionObservable(Metadata("Core Animation Tween", args: [tween])) { observer in + return MotionObservable(Metadata("Core Animation Tween", type: .interaction, args: [tween.duration, tween.delay, tween.values, tween.keyPositions, tween.timingFunctions, tween.timeline as Any, tween.enabled, tween.state])) { observer in var animationKeys: [String] = [] var activeAnimations = Set() From 687e6cc01dc82bd114a5f4f913cee54dc5071806 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Sun, 26 Mar 2017 18:27:51 -0700 Subject: [PATCH 02/30] Add example Podfile to the README. --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 2987105..58a1ce0 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,19 @@ Add `MaterialMotion` to your `Podfile`: pod 'MaterialMotion' +You will need to add `use_frameworks!` to your Podfile in order use Material Motion in your swift +app. + +A simple Podfile might look like so: + + project 'MyApp/MyApp.xcodeproj' + + use_frameworks! + + target 'MyApp' do + pod 'MaterialMotion' + end + Then run the following command: pod install From 486cff7dc497a66c5479f8117a599cf778fa575a Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Sun, 26 Mar 2017 18:29:04 -0700 Subject: [PATCH 03/30] Add syntax highlighting languages to the README. --- README.md | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 58a1ce0..6a80dac 100644 --- a/README.md +++ b/README.md @@ -91,30 +91,38 @@ runtime.add(tossable, to: <#view#>) Add `MaterialMotion` to your `Podfile`: - pod 'MaterialMotion' +```ruby +pod 'MaterialMotion' +``` You will need to add `use_frameworks!` to your Podfile in order use Material Motion in your swift app. A simple Podfile might look like so: - project 'MyApp/MyApp.xcodeproj' +```ruby +project 'MyApp/MyApp.xcodeproj' - use_frameworks! +use_frameworks! - target 'MyApp' do - pod 'MaterialMotion' - end +target 'MyApp' do + pod 'MaterialMotion' +end +``` Then run the following command: - pod install +```bash +pod install +``` ### Usage Import the framework: - import MaterialMotion +```swift +import MaterialMotion +``` You will now have access to all of the APIs. @@ -123,10 +131,12 @@ You will now have access to all of the APIs. Check out a local copy of the repo to access the Catalog application by running the following commands: - git clone https://github.com/material-motion/material-motion-swift.git - cd material-motion-swift - pod install - open MaterialMotion.xcworkspace +```bash +git clone https://github.com/material-motion/material-motion-swift.git +cd material-motion-swift +pod install +open MaterialMotion.xcworkspace +``` ## Case studies From 7197cb6b10f799e1689bf0d36e76f3a5f53d9021 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Sun, 26 Mar 2017 19:00:08 -0700 Subject: [PATCH 04/30] Revert "WIP of tracer." This reverts commit cbe6365985b3a6563cc9410e178ccef1ecea2f0d. --- examples/MaterialExpansionExample.swift | 2 - src/MotionRuntime.swift | 86 ------------------- src/debugging/Metadata.swift | 15 +--- .../coreAnimationPathTweenToStream.swift | 2 +- src/systems/coreAnimationSpringToStream.swift | 2 +- src/systems/coreAnimationTweenToStream.swift | 2 +- 6 files changed, 5 insertions(+), 104 deletions(-) diff --git a/examples/MaterialExpansionExample.swift b/examples/MaterialExpansionExample.swift index 9ec569c..f76b738 100644 --- a/examples/MaterialExpansionExample.swift +++ b/examples/MaterialExpansionExample.swift @@ -89,8 +89,6 @@ class MaterialExpansionExampleViewController: ExampleViewController { // Ensure that our mask always tracks the square. runtime.connect(runtime.get(square.layer).width, to: runtime.get(mask).width) runtime.connect(runtime.get(square.layer).height, to: runtime.get(mask).height) - - runtime.dumpTree() } override func exampleInformation() -> ExampleInfo { diff --git a/src/MotionRuntime.swift b/src/MotionRuntime.swift index daa78e1..ea37d77 100644 --- a/src/MotionRuntime.swift +++ b/src/MotionRuntime.swift @@ -37,9 +37,6 @@ public final class MotionRuntime { */ public init(containerView: UIView) { self.containerView = containerView - - let longpress = UILongPressGestureRecognizer(target: self, action: #selector(didLongPress)) - self.containerView.addGestureRecognizer(longpress) } /** @@ -64,10 +61,8 @@ public final class MotionRuntime { runtime. */ public func add(_ interaction: I, to target: I.Target, constraints: I.Constraints? = nil) { - interactionStack.append(Metadata("\(type(of: interaction))", type: .interaction, args: [target])) interaction.add(to: target, withRuntime: self, constraints: constraints) interactions.append(interaction) - interactionStack.removeLast() } /** @@ -192,88 +187,7 @@ public final class MotionRuntime { return lines.joined(separator: "\n") } - private class InteractionNode { - var this: Metadata - init(_ metadata: Metadata = Metadata("Runtime", type: .interaction)) { - self.this = metadata - } - var properties: [Metadata] = [] - var children: [Metadata: InteractionNode] = [:] - - func sortedChildren() -> [Metadata] { - if let sortedChildren = _sortedChildren { - return sortedChildren - } - - let sorted = children.keys.sorted(by: { $0.name < $1.name }) - _sortedChildren = sorted - return sorted - } - private var _sortedChildren: [Metadata]? - } - private var interactionTree = InteractionNode() - private var interactionStack: [Metadata] = [] - - public func dumpTree() { - dump(interactionTree) - } - - @objc private func didLongPress(_ gesture: UILongPressGestureRecognizer) { - let view = DebugView(frame: .init(origin: .init(x: 0, y: containerView.bounds.height * 2 / 3), size: .init(width: containerView.bounds.width, height: containerView.bounds.height / 3)), tree: interactionTree) - view.autoresizingMask = [.flexibleTopMargin, .flexibleWidth] - containerView.addSubview(view) - } - - private class DebugView: UIView, UITableViewDataSource { - let tree: InteractionNode - - init(frame: CGRect, tree: InteractionNode) { - self.tree = tree - - super.init(frame: frame) - - backgroundColor = .white - - let tableView = UITableView(frame: bounds, style: .grouped) - tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - tableView.dataSource = self - tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") - addSubview(tableView) - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - func numberOfSections(in tableView: UITableView) -> Int { - return 1 - } - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return tree.children.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) - cell.textLabel?.text = tree.sortedChildren()[indexPath.row].label - return cell - } - } - private func write(_ stream: O, to property: ReactiveProperty) where O.T == T { - var node: InteractionNode = interactionTree - for interaction in interactionStack { - if let child = node.children[interaction] { - node = child - } else { - let child = InteractionNode(interaction) - node.children[interaction] = child - node = child - } - } - // TODO: Extract all properties that are backing this stream and add them to this interaction. - // Need to walk up the stream's metadata recursively. - metadata.append(stream.metadata.createChild(property.metadata)) subscriptions.append(stream.subscribe(next: { property.value = $0 }, coreAnimation: property.coreAnimation, diff --git a/src/debugging/Metadata.swift b/src/debugging/Metadata.swift index 247d242..e79576d 100644 --- a/src/debugging/Metadata.swift +++ b/src/debugging/Metadata.swift @@ -21,11 +21,10 @@ public protocol Inspectable { var metadata: Metadata { get } } -public final class Metadata: CustomDebugStringConvertible, Hashable { +public final class Metadata: CustomDebugStringConvertible { enum Metatype { case node case constraint - case interaction case property case constant } @@ -63,9 +62,7 @@ public final class Metadata: CustomDebugStringConvertible, Hashable { private var style: String { switch type { case .constraint: - return "style=filled, fillcolor=\"#C51162\"" - case .interaction: - return "style=filled, fillcolor=\"#C51162\"" + return "style=filled, fillcolor=\"#FF80AB\"" case .node: return "style=filled, fillcolor=\"#FFFFFF\"" case .property: @@ -123,14 +120,6 @@ public final class Metadata: CustomDebugStringConvertible, Hashable { return description.joined(separator: "\n").replacingOccurrences(of: "MaterialMotion.", with: "") } - - public var hashValue: Int { - return name.hashValue - } - - static public func ==(lhs: Metadata, rhs: Metadata) -> Bool { - return lhs.name == rhs.name - } } func pretty(_ object: Any) -> String { diff --git a/src/systems/coreAnimationPathTweenToStream.swift b/src/systems/coreAnimationPathTweenToStream.swift index e69065e..5f88386 100644 --- a/src/systems/coreAnimationPathTweenToStream.swift +++ b/src/systems/coreAnimationPathTweenToStream.swift @@ -20,7 +20,7 @@ import IndefiniteObservable /** Create a core animation tween system for a Tween plan. */ public func coreAnimation(_ tween: PathTweenShadow) -> MotionObservable { - return MotionObservable(Metadata("Core Animation Path Tween", type: .interaction, args: [tween.duration, tween.delay, tween.path, tween.timeline as Any, tween.enabled, tween.state])) { observer in + return MotionObservable(Metadata("Core Animation Path Tween", args: [tween.duration, tween.delay, tween.path, tween.timeline as Any, tween.enabled, tween.state])) { observer in var subscriptions: [Subscription] = [] let key = NSUUID().uuidString diff --git a/src/systems/coreAnimationSpringToStream.swift b/src/systems/coreAnimationSpringToStream.swift index 0cb2117..1a7bb51 100644 --- a/src/systems/coreAnimationSpringToStream.swift +++ b/src/systems/coreAnimationSpringToStream.swift @@ -24,7 +24,7 @@ import UIKit */ public func coreAnimation(_ spring: SpringShadow) -> (MotionObservable) where T: Subtractable { let initialVelocityStream = spring.initialVelocity.asStream() - return MotionObservable(Metadata("Core Animation Spring", type: .interaction, args: [spring.enabled, spring.state, spring.initialValue, spring.initialVelocity, spring.destination, spring.tension, spring.friction, spring.mass, spring.suggestedDuration, spring.threshold])) { observer in + return MotionObservable(Metadata("Core Animation Spring", args: [spring.enabled, spring.state, spring.initialValue, spring.initialVelocity, spring.destination, spring.tension, spring.friction, spring.mass, spring.suggestedDuration, spring.threshold])) { observer in var animationKeys: [String] = [] var to: T? diff --git a/src/systems/coreAnimationTweenToStream.swift b/src/systems/coreAnimationTweenToStream.swift index 4d7dee4..e455972 100644 --- a/src/systems/coreAnimationTweenToStream.swift +++ b/src/systems/coreAnimationTweenToStream.swift @@ -35,7 +35,7 @@ public func coreAnimation(_ tween: TweenShadow) -> MotionObservable whe } private func streamFromTween(_ tween: TweenShadow, configureEvent: @escaping (CoreAnimationChannelAdd) -> CoreAnimationChannelAdd) -> MotionObservable { - return MotionObservable(Metadata("Core Animation Tween", type: .interaction, args: [tween.duration, tween.delay, tween.values, tween.keyPositions, tween.timingFunctions, tween.timeline as Any, tween.enabled, tween.state])) { observer in + return MotionObservable(Metadata("Core Animation Tween", args: [tween])) { observer in var animationKeys: [String] = [] var activeAnimations = Set() From 295d64556048429a5ec6d7859a0ce8922b84a4fd Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Sun, 26 Mar 2017 19:00:41 -0700 Subject: [PATCH 05/30] TransitionSpring configuration now defaults to Core Animation configuration defaults. Summary: This is the most common type of configuration when using TransitionSpring with Material Motion out of the box, so we now just apply the configuration by default. Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, markwei Reviewed By: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, markwei Tags: #material_motion Differential Revision: http://codereview.cc/D2964 --- src/interactions/TransitionSpring.swift | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/interactions/TransitionSpring.swift b/src/interactions/TransitionSpring.swift index 515a9ff..04dac8e 100644 --- a/src/interactions/TransitionSpring.swift +++ b/src/interactions/TransitionSpring.swift @@ -17,6 +17,26 @@ import Foundation import UIKit +/** + The default transition spring tension configuration. + */ +public let defaultTransitionSpringTension: CGFloat = 500 + +/** + The default transition spring friction configuration. + */ +public let defaultTransitionSpringFriction: CGFloat = 1000 + +/** + The default transition spring mass configuration. + */ +public let defaultTransitionSpringMass: CGFloat = 3 + +/** + The default transition spring suggested duration. + */ +public let defaultTransitionSpringSuggestedDuration: CGFloat = 0.5 + /** A transition spring pulls a value from one side of a transition to another. @@ -73,6 +93,12 @@ public final class TransitionSpring: Spring { self.toggledDestination = direction.rewrite([.backward: backwardDestination, .forward: forwardDestination]) super.init(threshold: threshold, system: system) + + // Apply Core Animation transition spring defaults. + friction.value = defaultTransitionSpringTension + tension.value = defaultTransitionSpringFriction + mass.value = defaultTransitionSpringMass + suggestedDuration.value = defaultTransitionSpringSuggestedDuration } public override func add(to property: ReactiveProperty, From 419327972893b92a4317e903ad933550d096a76f Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Sun, 26 Mar 2017 19:24:28 -0700 Subject: [PATCH 06/30] Make TransitionSpring and Spring T type conform to Subtractable so that coreAnimation can be set as the default system. Summary: Simplified all of the examples as a result. Threshold only comes in to play when using systems that expose a configurable threshold property. Core Animation does not, so the default signature for TransitionSpring and Spring is now much simpler for the common case. Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, markwei Reviewed By: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, markwei Tags: #material_motion Differential Revision: http://codereview.cc/D2965 --- examples/ContextualTransitionExample.swift | 28 ++++--------------- ...InteractivePushBackTransitionExample.swift | 18 +++--------- examples/ModalDialogExample.swift | 4 +-- examples/PushBackTransitionExample.swift | 18 +++--------- examples/StickerPickerExample.swift | 8 ++---- .../Contents.swift | 2 +- .../Contents.swift | 4 +-- .../Contents.swift | 2 +- src/interactions/Spring.swift | 10 +++---- src/interactions/Tossable.swift | 7 +---- src/interactions/TransitionSpring.swift | 10 +++---- src/protocols/Systems.swift | 8 +++++- 12 files changed, 38 insertions(+), 81 deletions(-) diff --git a/examples/ContextualTransitionExample.swift b/examples/ContextualTransitionExample.swift index 2cc9f81..1e47eee 100644 --- a/examples/ContextualTransitionExample.swift +++ b/examples/ContextualTransitionExample.swift @@ -291,41 +291,23 @@ private class PushBackTransition: Transition { .rewrite([.below: .backward, .above: .backward]), to: ctx.direction) - let movement = spring(back: contextView, fore: foreImageView, ctx: ctx) + let backPosition = contextView.superview!.convert(contextView.layer.position, to: ctx.containerView()) + let forePosition = foreImageView.superview!.convert(foreImageView.layer.position, to: ctx.containerView()) + let movement = TransitionSpring(back: backPosition, fore: forePosition, direction: ctx.direction) let tossable = Tossable(spring: movement, draggable: draggable) runtime.add(tossable, to: replicaView) - let size = spring(back: contextView.bounds.size, fore: fitSize, threshold: 1, ctx: ctx) + let size = TransitionSpring(back: contextView.bounds.size, fore: fitSize, direction: ctx.direction) runtime.toggle(size, inReactionTo: draggable) runtime.add(size, to: runtime.get(replicaView).reactiveLayer.size) - let opacity = spring(back: CGFloat(0), fore: CGFloat(1), threshold: 0.01, ctx: ctx) + let opacity = TransitionSpring(back: 0, fore: 1, direction: ctx.direction) runtime.add(opacity, to: runtime.get(ctx.fore.view.layer).opacity) runtime.add(Hidden(), to: foreImageView) return [tossable.spring, gesture, size, opacity] } - - private func spring(back: T, fore: T, threshold: CGFloat, ctx: TransitionContext) -> TransitionSpring where T: Subtractable, T: Zeroable, T: Equatable { - let spring = TransitionSpring(back: back, fore: fore, direction: ctx.direction, threshold: threshold, system: coreAnimation) - spring.friction.value = 500 - spring.tension.value = 1000 - spring.mass.value = 3 - spring.suggestedDuration.value = 0.5 - return spring - } - - private func spring(back: UIView, fore: UIView, ctx: TransitionContext) -> TransitionSpring { - let backPosition = back.superview!.convert(back.layer.position, to: ctx.containerView()) - let forePosition = fore.superview!.convert(fore.layer.position, to: ctx.containerView()) - let spring = TransitionSpring(back: backPosition, fore: forePosition, direction: ctx.direction, threshold: 1, system: coreAnimation) - spring.friction.value = 500 - spring.tension.value = 1000 - spring.mass.value = 3 - spring.suggestedDuration.value = 0.5 - return spring - } } // TODO: The need here is we want to hide a given view will the transition is active. This diff --git a/examples/InteractivePushBackTransitionExample.swift b/examples/InteractivePushBackTransitionExample.swift index a77b73c..1763d43 100644 --- a/examples/InteractivePushBackTransitionExample.swift +++ b/examples/InteractivePushBackTransitionExample.swift @@ -85,11 +85,10 @@ private class PushBackTransition: Transition { let bounds = ctx.containerView().bounds let backPosition = CGPoint(x: bounds.midX, y: bounds.maxY + ctx.fore.view.bounds.height / 2) let forePosition = CGPoint(x: bounds.midX, y: bounds.midY) - let movement = spring(back: backPosition, - fore: forePosition, - threshold: 1, - ctx: ctx) - let scaleSpring = spring(back: CGFloat(1), fore: CGFloat(0.95), threshold: 0.005, ctx: ctx) + let movement = TransitionSpring(back: backPosition, + fore: forePosition, + direction: ctx.direction) + let scaleSpring = TransitionSpring(back: 1, fore: 0.95, direction: ctx.direction) let scale = runtime.get(ctx.back.view.layer).scale runtime.connect(runtime.get(ctx.fore.view.layer).position.y() @@ -114,13 +113,4 @@ private class PushBackTransition: Transition { return [tossable.spring, scaleSpring, gesture] } - - private func spring(back: T, fore: T, threshold: CGFloat, ctx: TransitionContext) -> TransitionSpring where T: Subtractable, T: Zeroable, T: Equatable { - let spring = TransitionSpring(back: back, fore: fore, direction: ctx.direction, threshold: threshold, system: coreAnimation) - spring.friction.value = 500 - spring.tension.value = 1000 - spring.mass.value = 3 - spring.suggestedDuration.value = 0.5 - return spring - } } diff --git a/examples/ModalDialogExample.swift b/examples/ModalDialogExample.swift index 6f972af..0d48f45 100644 --- a/examples/ModalDialogExample.swift +++ b/examples/ModalDialogExample.swift @@ -111,9 +111,7 @@ class ModalDialogTransition: SelfDismissingTransition { let movement = TransitionSpring(back: backPosition, fore: forePosition, - direction: ctx.direction, - threshold: 1, - system: coreAnimation) + direction: ctx.direction) let tossable = Tossable(spring: movement, draggable: draggable) runtime.add(tossable, to: ctx.fore.view) diff --git a/examples/PushBackTransitionExample.swift b/examples/PushBackTransitionExample.swift index 6cbc6ea..906d0cc 100644 --- a/examples/PushBackTransitionExample.swift +++ b/examples/PushBackTransitionExample.swift @@ -66,24 +66,14 @@ private class PushBackTransition: Transition { required init() {} func willBeginTransition(withContext ctx: TransitionContext, runtime: MotionRuntime) -> [Stateful] { - let position = spring(back: ctx.containerView().bounds.height + ctx.fore.view.layer.bounds.height / 2, - fore: ctx.containerView().bounds.midY, - threshold: 1, - ctx: ctx) - let scale = spring(back: 1, fore: 0.95, threshold: 0.005, ctx: ctx) + let position = TransitionSpring(back: ctx.containerView().bounds.height + ctx.fore.view.layer.bounds.height / 2, + fore: ctx.containerView().bounds.midY, + direction: ctx.direction) + let scale = TransitionSpring(back: 1, fore: 0.95, direction: ctx.direction) runtime.add(position, to: runtime.get(ctx.fore.view.layer).positionY) runtime.add(scale, to: runtime.get(ctx.back.view.layer).scale) return [position, scale] } - - private func spring(back: CGFloat, fore: CGFloat, threshold: CGFloat, ctx: TransitionContext) -> TransitionSpring { - let spring = TransitionSpring(back: back, fore: fore, direction: ctx.direction, threshold: threshold, system: coreAnimation) - spring.friction.value = 500 - spring.tension.value = 1000 - spring.mass.value = 3 - spring.suggestedDuration.value = 0.5 - return spring - } } diff --git a/examples/StickerPickerExample.swift b/examples/StickerPickerExample.swift index c34334d..895f679 100644 --- a/examples/StickerPickerExample.swift +++ b/examples/StickerPickerExample.swift @@ -37,7 +37,7 @@ class StickerPickerExampleViewController: ExampleViewController, StickerListView view.addSubview(stickerView) let direction = createProperty(withInitialValue: TransitionDirection.forward) - let spring = TransitionSpring(back: CGFloat(1.5), fore: 1, direction: direction, threshold: 0.1, system: coreAnimation) + let spring = TransitionSpring(back: CGFloat(1.5), fore: 1, direction: direction) runtime.add(spring, to: runtime.get(stickerView.layer).scale) runtime.add(DirectlyManipulable(), to: stickerView) @@ -201,11 +201,7 @@ private class ModalTransition: Transition { ctx.fore.view.bounds = CGRect(origin: .zero, size: size) } - let spring = TransitionSpring(back: CGFloat(0), - fore: CGFloat(1), - direction: ctx.direction, - threshold: 0.01, - system: coreAnimation) + let spring = TransitionSpring(back: 0, fore: 1, direction: ctx.direction) runtime.add(spring, to: runtime.get(ctx.fore.view.layer).opacity) return [spring] diff --git a/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to combine interactions.xcplaygroundpage/Contents.swift b/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to combine interactions.xcplaygroundpage/Contents.swift index 8428eaa..0e37cac 100644 --- a/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to combine interactions.xcplaygroundpage/Contents.swift +++ b/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to combine interactions.xcplaygroundpage/Contents.swift @@ -14,7 +14,7 @@ let runtime = MotionRuntime(containerView: canvas) //: --- //: //: First we create the interactions we know we'll need: Spring and Draggable. -let spring = Spring(threshold: 1, system: coreAnimation) +let spring = Spring() let draggable = Draggable() //: Inspecting Draggable's documentation reveals that it will affect the view's layer position (Option-Click Draggable), so let's make sure we use the same property for our spring: diff --git a/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to create new interactions.xcplaygroundpage/Contents.swift b/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to create new interactions.xcplaygroundpage/Contents.swift index a96fda4..7e3fcb6 100644 --- a/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to create new interactions.xcplaygroundpage/Contents.swift +++ b/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to create new interactions.xcplaygroundpage/Contents.swift @@ -22,7 +22,7 @@ final class MyTossable: Interaction { let draggable: Draggable let spring: Spring - init(spring: Spring, draggable: Draggable = Draggable()) { + init(spring: Spring = Spring(), draggable: Draggable = Draggable()) { self.spring = spring self.draggable = draggable } @@ -46,7 +46,7 @@ final class MyTossable: Interaction { //: Using our new interaction is a matter of instantiating it and associating it with a view: -let tossable = MyTossable(spring: .init(threshold: 1, system: coreAnimation)) +let tossable = MyTossable() runtime.add(tossable, to: view) runtime.add(SetPositionOnTap(), to: tossable.spring.destination) diff --git a/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to use springs.xcplaygroundpage/Contents.swift b/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to use springs.xcplaygroundpage/Contents.swift index ef218ae..c6306cc 100644 --- a/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to use springs.xcplaygroundpage/Contents.swift +++ b/examples/apps/Catalog/ReactivePlayground.playground/Pages/How to use springs.xcplaygroundpage/Contents.swift @@ -21,7 +21,7 @@ let runtime = MotionRuntime(containerView: canvas) let position = runtime.get(view.layer).position //: Next we'll create our Spring interaction. We must specify the type of Spring we'd like to use because Spring is a [generic type](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html). In this case we want to animate a CGPoint, so we'll define that here: -let spring = Spring(threshold: 1, system: coreAnimation) +let spring = Spring() //: Starting the spring animation is now a simple matter of adding it to the property: runtime.add(spring, to: position) diff --git a/src/interactions/Spring.swift b/src/interactions/Spring.swift index 325f608..92726ad 100644 --- a/src/interactions/Spring.swift +++ b/src/interactions/Spring.swift @@ -45,14 +45,14 @@ public let defaultSpringMass: CGFloat = 1 T-value constraints may be applied to this interaction. */ -public class Spring: Interaction, Togglable, Stateful { +public class Spring: Interaction, Togglable, Stateful where T: Zeroable, T: Subtractable { /** Creates a spring with a given threshold and system. - - parameter threshold: The threshold of movement defining the completion of the spring simulation. - - parameter system: Often coreAnimation. Can be another system if a system support library is available. + - parameter threshold: The threshold of movement defining the completion of the spring simulation. This parameter is not used by the Core Animation system and can be left as a default value. + - parameter system: The system that should be used to drive this spring. */ - public init(threshold: CGFloat, system: @escaping SpringToStream) { + public init(threshold: CGFloat = 1, system: @escaping SpringToStream = coreAnimation) { self.threshold = createProperty("Spring.threshold", withInitialValue: threshold) self.system = system } @@ -140,7 +140,7 @@ public class Spring: Interaction, Togglable, Stateful { private var activeSprings = Set>() } -public struct SpringShadow: Hashable { +public struct SpringShadow: Hashable where T: Zeroable, T: Subtractable { public let enabled: ReactiveProperty public let state = createProperty(withInitialValue: MotionState.atRest) public let initialValue: ReactiveProperty diff --git a/src/interactions/Tossable.swift b/src/interactions/Tossable.swift index 494966f..b5e226c 100644 --- a/src/interactions/Tossable.swift +++ b/src/interactions/Tossable.swift @@ -48,12 +48,7 @@ public final class Tossable: Interaction, Stateful { */ public let spring: Spring - public init(system: @escaping SpringToStream = coreAnimation, draggable: Draggable = Draggable()) { - self.spring = Spring(threshold: 1, system: system) - self.draggable = draggable - } - - public init(spring: Spring, draggable: Draggable = Draggable()) { + public init(spring: Spring = Spring(), draggable: Draggable = Draggable()) { self.spring = spring self.draggable = draggable } diff --git a/src/interactions/TransitionSpring.swift b/src/interactions/TransitionSpring.swift index 04dac8e..c661042 100644 --- a/src/interactions/TransitionSpring.swift +++ b/src/interactions/TransitionSpring.swift @@ -61,7 +61,7 @@ public let defaultTransitionSpringSuggestedDuration: CGFloat = 0.5 T-value constraints may be applied to this interaction. */ -public final class TransitionSpring: Spring { +public final class TransitionSpring: Spring where T: Zeroable, T: Subtractable { /** The destination when the transition is moving backward. @@ -79,14 +79,14 @@ public final class TransitionSpring: Spring { - parameter back: The destination to which the spring will pull the view when transitioning backward. - parameter fore: The destination to which the spring will pull the view when transitioning forward. - parameter direction: The spring will change its destination in reaction to this property's changes. - - parameter threshold: The threshold of movement defining the completion of the spring simulation. - - parameter system: Often coreAnimation. Can be another system if a system support library is available. + - parameter threshold: The threshold of movement defining the completion of the spring simulation. This parameter is not used by the Core Animation system and can be left as a default value. + - parameter system: The system that should be used to drive this spring. */ public init(back backwardDestination: T, fore forwardDestination: T, direction: ReactiveProperty, - threshold: CGFloat, - system: @escaping SpringToStream) { + threshold: CGFloat = 1, + system: @escaping SpringToStream = coreAnimation) { self.backwardDestination = backwardDestination self.forwardDestination = forwardDestination self.initialValue = direction == .forward ? backwardDestination : forwardDestination diff --git a/src/protocols/Systems.swift b/src/protocols/Systems.swift index 58ebe8f..5e0de15 100644 --- a/src/protocols/Systems.swift +++ b/src/protocols/Systems.swift @@ -36,7 +36,13 @@ public typealias ScrollViewToStream = (UIScrollView) -> MotionObservable = (TweenShadow) -> MotionObservable +/** + Swift 3.1 does not allow generic typealiases to use protocol lists, so we define this composite + type instead. + */ +public protocol ZeroableAndSubtractable: Zeroable, Subtractable {} + /** A spring-to-stream function creates a MotionObservable from a Spring and initial value stream. */ -public typealias SpringToStream = (SpringShadow) -> MotionObservable +public typealias SpringToStream = (SpringShadow) -> MotionObservable From bdee45533c68f2c98e7b543acf9e3589a783eb46 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Sun, 26 Mar 2017 20:08:40 -0700 Subject: [PATCH 07/30] Add ChangeDirectionOnRelease interaction. Summary: This interaction changes the transition direction based on the velocity of a gesture recognizer. Updated the examples to use the new interaction. Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, markwei Reviewed By: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, markwei Tags: #material_motion Differential Revision: http://codereview.cc/D2966 --- .../ChangeDirectionOnReleaseExample.swift | 56 +++++++++++ examples/ContextualTransitionExample.swift | 8 +- ...InteractivePushBackTransitionExample.swift | 11 +-- examples/ModalDialogExample.swift | 12 +-- .../Catalog/Catalog/TableOfContents.swift | 4 + .../project.pbxproj | 4 + .../ChangeDirectionOnRelease.swift | 97 +++++++++++++++++++ 7 files changed, 172 insertions(+), 20 deletions(-) create mode 100644 examples/ChangeDirectionOnReleaseExample.swift create mode 100644 src/interactions/ChangeDirectionOnRelease.swift diff --git a/examples/ChangeDirectionOnReleaseExample.swift b/examples/ChangeDirectionOnReleaseExample.swift new file mode 100644 index 0000000..51eee95 --- /dev/null +++ b/examples/ChangeDirectionOnReleaseExample.swift @@ -0,0 +1,56 @@ +/* + Copyright 2016-present The Material Motion Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import UIKit +import MaterialMotion + +class ChangeDirectionOnReleaseExampleViewController: ExampleViewController { + + var runtime: MotionRuntime! + + override func viewDidLoad() { + super.viewDidLoad() + + let targetView = center(createExampleSquareView(), within: view) + targetView.layer.borderColor = targetView.backgroundColor?.cgColor + targetView.layer.borderWidth = 1 + targetView.backgroundColor = nil + view.addSubview(targetView) + + let exampleView = center(createExampleView(), within: view) + view.addSubview(exampleView) + + runtime = MotionRuntime(containerView: view) + + let direction = createProperty(withInitialValue: TransitionDirection.backward) + + let positionSpring = TransitionSpring(back: CGPoint(x: view.bounds.midX, y: view.bounds.height * 4 / 10), + fore: CGPoint(x: view.bounds.midX, y: view.bounds.height * 6 / 10), + direction: direction) + let tossable = Tossable(spring: positionSpring) + runtime.add(ChangeDirectionOnRelease(of: tossable.draggable.nextGestureRecognizer, + whenNegative: .backward, + whenPositive: .forward), + to: direction) + runtime.add(tossable, to: exampleView) + runtime.add(positionSpring, to: runtime.get(targetView.layer).position) + } + + override func exampleInformation() -> ExampleInfo { + return .init(title: type(of: self).catalogBreadcrumbs().last!, + instructions: "Toss the view to change its position.") + } +} diff --git a/examples/ContextualTransitionExample.swift b/examples/ContextualTransitionExample.swift index 1e47eee..ab0b9a1 100644 --- a/examples/ContextualTransitionExample.swift +++ b/examples/ContextualTransitionExample.swift @@ -284,12 +284,8 @@ private class PushBackTransition: Transition { .slop(size: 100) .rewrite([.onExit: .backward, .onReturn: .forward]), to: ctx.direction) - runtime.connect(gesture - .velocityOnReleaseStream() - .y() - .thresholdRange(min: -100, max: 100) - .rewrite([.below: .backward, .above: .backward]), - to: ctx.direction) + + runtime.add(ChangeDirectionOnRelease(of: draggable.nextGestureRecognizer), to: ctx.direction) let backPosition = contextView.superview!.convert(contextView.layer.position, to: ctx.containerView()) let forePosition = foreImageView.superview!.convert(foreImageView.layer.position, to: ctx.containerView()) diff --git a/examples/InteractivePushBackTransitionExample.swift b/examples/InteractivePushBackTransitionExample.swift index 1763d43..86edfb9 100644 --- a/examples/InteractivePushBackTransitionExample.swift +++ b/examples/InteractivePushBackTransitionExample.swift @@ -72,14 +72,7 @@ private class PushBackTransition: Transition { draggable = Draggable() } - let gesture = runtime.get(draggable.nextGestureRecognizer) - runtime.connect(gesture - .velocityOnReleaseStream() - .y() - .thresholdRange(min: -100, max: 100) - .rewrite([.below: .forward, - .within: ctx.direction.value, - .above: .backward]), + runtime.add(ChangeDirectionOnRelease(of: draggable.nextGestureRecognizer, whenNegative: .forward), to: ctx.direction) let bounds = ctx.containerView().bounds @@ -91,6 +84,8 @@ private class PushBackTransition: Transition { let scaleSpring = TransitionSpring(back: 1, fore: 0.95, direction: ctx.direction) let scale = runtime.get(ctx.back.view.layer).scale + + let gesture = runtime.get(draggable.nextGestureRecognizer) runtime.connect(runtime.get(ctx.fore.view.layer).position.y() // The position's final value gets written to by Core Animation when the gesture ends and the // movement spring engages. Because we're connecting position to the scale here, this would diff --git a/examples/ModalDialogExample.swift b/examples/ModalDialogExample.swift index 0d48f45..0e1199f 100644 --- a/examples/ModalDialogExample.swift +++ b/examples/ModalDialogExample.swift @@ -97,16 +97,16 @@ class ModalDialogTransition: SelfDismissingTransition { let gesture = runtime.get(draggable.nextGestureRecognizer) let centerY = ctx.containerView().bounds.height / 2.0 + + runtime.add(ChangeDirectionOnRelease(of: draggable.nextGestureRecognizer, whenNegative: .forward), + to: ctx.direction) + runtime.connect(gesture .velocityOnReleaseStream() .y() .thresholdRange(min: -100, max: 100) - // If one of rewrite's target values is a stream, then all the target values must be - // streams. - .rewrite([.below: createProperty(withInitialValue: .forward).asStream(), - .within: position.y().threshold(centerY).rewrite([.below: .forward, - .above: .backward]), - .above: createProperty(withInitialValue: .backward).asStream()]), + .rewrite([.within: position.y().threshold(centerY).rewrite([.below: .forward, + .above: .backward])]), to: ctx.direction) let movement = TransitionSpring(back: backPosition, diff --git a/examples/apps/Catalog/Catalog/TableOfContents.swift b/examples/apps/Catalog/Catalog/TableOfContents.swift index 32ff40c..517756b 100644 --- a/examples/apps/Catalog/Catalog/TableOfContents.swift +++ b/examples/apps/Catalog/Catalog/TableOfContents.swift @@ -62,6 +62,10 @@ extension ArcMoveExampleViewController { class func catalogBreadcrumbs() -> [String] { return ["Interactions", "Arc move"] } } +extension ChangeDirectionOnReleaseExampleViewController { + class func catalogBreadcrumbs() -> [String] { return ["Interactions", "Change direction on release"] } +} + extension DirectlyManipulableExampleViewController { class func catalogBreadcrumbs() -> [String] { return ["Interactions", "Directly manipulable"] } } diff --git a/examples/apps/Catalog/MaterialMotionCatalog.xcodeproj/project.pbxproj b/examples/apps/Catalog/MaterialMotionCatalog.xcodeproj/project.pbxproj index e06876b..60fe369 100644 --- a/examples/apps/Catalog/MaterialMotionCatalog.xcodeproj/project.pbxproj +++ b/examples/apps/Catalog/MaterialMotionCatalog.xcodeproj/project.pbxproj @@ -71,6 +71,7 @@ 66DDFD161E71F90F00AA46B7 /* HowToUseReactiveConstraintsExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66DDFD151E71F90F00AA46B7 /* HowToUseReactiveConstraintsExample.swift */; }; 66DDFD201E73281200AA46B7 /* HowToMakeACustomOperatorExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66DDFD1F1E73281200AA46B7 /* HowToMakeACustomOperatorExample.swift */; }; 66E6F2371E3FC791003158D3 /* PhotoAlbum.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 66E6F2361E3FC791003158D3 /* PhotoAlbum.xcassets */; }; + 66F09E511E88B7EF00FC8D1B /* ChangeDirectionOnReleaseExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66F09E501E88B7EF00FC8D1B /* ChangeDirectionOnReleaseExample.swift */; }; 66F2C3C91E83245800DD9728 /* invertedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66F2C3C81E83245800DD9728 /* invertedTests.swift */; }; D3F169473691C7D44E72DEED /* Pods_UnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D89BD1C45FD980DEF396AB66 /* Pods_UnitTests.framework */; }; /* End PBXBuildFile section */ @@ -157,6 +158,7 @@ 66DDFD151E71F90F00AA46B7 /* HowToUseReactiveConstraintsExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HowToUseReactiveConstraintsExample.swift; path = ../../HowToUseReactiveConstraintsExample.swift; sourceTree = ""; }; 66DDFD1F1E73281200AA46B7 /* HowToMakeACustomOperatorExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HowToMakeACustomOperatorExample.swift; path = ../../HowToMakeACustomOperatorExample.swift; sourceTree = ""; }; 66E6F2361E3FC791003158D3 /* PhotoAlbum.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = PhotoAlbum.xcassets; sourceTree = SOURCE_ROOT; }; + 66F09E501E88B7EF00FC8D1B /* ChangeDirectionOnReleaseExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ChangeDirectionOnReleaseExample.swift; path = ../../ChangeDirectionOnReleaseExample.swift; sourceTree = ""; }; 66F2C3C81E83245800DD9728 /* invertedTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = invertedTests.swift; sourceTree = ""; }; 773711C342E83B1FF1F9C8BB /* Pods-MaterialMotionCatalog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MaterialMotionCatalog.debug.xcconfig"; path = "../../../Pods/Target Support Files/Pods-MaterialMotionCatalog/Pods-MaterialMotionCatalog.debug.xcconfig"; sourceTree = ""; }; 800852A3E58C3B077D36E8DD /* Pods-MaterialMotionCatalog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MaterialMotionCatalog.release.xcconfig"; path = "../../../Pods/Target Support Files/Pods-MaterialMotionCatalog/Pods-MaterialMotionCatalog.release.xcconfig"; sourceTree = ""; }; @@ -224,6 +226,7 @@ 660DA31C1E7A07BC008F7401 /* SpringExample.swift */, 660DA3151E79F6A3008F7401 /* TossableExample.swift */, 660DA3201E7A106D008F7401 /* TweenExample.swift */, + 66F09E501E88B7EF00FC8D1B /* ChangeDirectionOnReleaseExample.swift */, ); name = Interactions; sourceTree = ""; @@ -618,6 +621,7 @@ files = ( 667E945B1E71EF0E005CAC78 /* StickerPickerExample.swift in Sources */, 667E94551E71EF0E005CAC78 /* DirectlyManipulableExample.swift in Sources */, + 66F09E511E88B7EF00FC8D1B /* ChangeDirectionOnReleaseExample.swift in Sources */, 666FAA841D384A6B000363DA /* AppDelegate.swift in Sources */, 660DA3171E79F6A3008F7401 /* TossableExample.swift in Sources */, 660DA30F1E79EA62008F7401 /* RotatableExample.swift in Sources */, diff --git a/src/interactions/ChangeDirectionOnRelease.swift b/src/interactions/ChangeDirectionOnRelease.swift new file mode 100644 index 0000000..c803f7a --- /dev/null +++ b/src/interactions/ChangeDirectionOnRelease.swift @@ -0,0 +1,97 @@ +/* + Copyright 2017-present The Material Motion Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation +import UIKit + +/** + Changes the direction of a transition when the provided pan gesture recognizer completes. + + Without any configuration, will set the direction to backward if the absolute velocity exceeds + minimumThreshold on the y axis. + + **Common configurations** + + *Modal dialogs and sheets*: cancel a dismissal when tossing up using `whenNegative: .forward`. + + **Constraints** + + Either the x or y axis can be selected. The default axis is y. + */ +public final class ChangeDirectionOnRelease: Interaction { + /** + The gesture recognizer that will be observed by this interaction. + */ + public let gesture: UIPanGestureRecognizer + + /** + The minimum absolute velocity required change the transition's direction. + + If this velocity is not met, the direction will not be changed. + */ + public let minimumVelocity: CGFloat + + /** + The transition direction to emit when the velocity is below -minimumVelocity. + */ + public let whenNegative: TransitionDirection + + /** + The transition direction to emit when the velocity is above minimumVelocity. + */ + public let whenPositive: TransitionDirection + + /** + - parameter minimumVelocity: The minimum absolute velocity required to change the transition's direction. + */ + public init(of gesture: UIPanGestureRecognizer, minimumVelocity: CGFloat = 100, whenNegative: TransitionDirection = .backward, whenPositive: TransitionDirection = .backward) { + self.gesture = gesture + self.minimumVelocity = minimumVelocity + self.whenNegative = whenNegative + self.whenPositive = whenPositive + } + + /** + The velocity axis to observe. + */ + public enum Axis { + /** + Observes the velocity's x axis. + */ + case x + + /** + Observes the velocity's y axis. + */ + case y + } + + public func add(to direction: ReactiveProperty, withRuntime runtime: MotionRuntime, constraints axis: Axis?) { + let axis = axis ?? .y + let chooseAxis: (MotionObservable) -> MotionObservable + switch axis { + case .x: + chooseAxis = { $0.x() } + case .y: + chooseAxis = { $0.y() } + } + runtime.connect(chooseAxis(runtime.get(gesture).velocityOnReleaseStream()) + .thresholdRange(min: -minimumVelocity, max: minimumVelocity) + .rewrite([.below: whenNegative, .above: whenPositive]), + to: direction) + + } +} From 840d97cd68321dd241e157ed9527cdc83ed73489 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Mon, 27 Mar 2017 18:49:13 -0700 Subject: [PATCH 08/30] Fix crashing bug when connecting properties to one another. Summary: The crash occurs in makeAdditive implementations due to NSNumber type conversions somewhere in the pipeline. Closes https://github.com/material-motion/material-motion-swift/issues/67 Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, chuga Reviewed By: O4 Material Apple platform reviewers, chuga Tags: #material_motion Differential Revision: http://codereview.cc/D2967 --- src/reactivetypes/ReactiveCALayer.swift | 29 ++++++++++++++++++------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/reactivetypes/ReactiveCALayer.swift b/src/reactivetypes/ReactiveCALayer.swift index fe91ef9..6badf21 100644 --- a/src/reactivetypes/ReactiveCALayer.swift +++ b/src/reactivetypes/ReactiveCALayer.swift @@ -207,14 +207,27 @@ public func createCoreAnimationProperty(_ name: String, initialValue: T, exte animation.keyPath = keyPath - if let makeAdditive = info.makeAdditive, let basicAnimation = animation as? CABasicAnimation { - basicAnimation.fromValue = makeAdditive(basicAnimation.fromValue!, basicAnimation.toValue!) - basicAnimation.toValue = makeAdditive(basicAnimation.toValue!, basicAnimation.toValue!) - basicAnimation.isAdditive = true - } else if let makeAdditive = info.makeAdditive, let keyframeAnimation = animation as? CAKeyframeAnimation { - let lastValue = keyframeAnimation.values!.last! - keyframeAnimation.values = keyframeAnimation.values!.map { makeAdditive($0, lastValue) } - keyframeAnimation.isAdditive = true + if let unsafeMakeAdditive = info.makeAdditive { + let makeAdditive: ((Any, Any) -> Any) = { from, to in + // When mapping properties to properties it's possible for the values to get implicitly + // wrapped in an NSNumber instance. This may cause the generic makeAdditive + // implementation to fail to cast to T, so we unbox the type here instead. + if let from = from as? NSNumber, let to = to as? NSNumber { + return from.doubleValue - to.doubleValue + } + return unsafeMakeAdditive(from, to) + } + + if let basicAnimation = animation as? CABasicAnimation { + basicAnimation.fromValue = makeAdditive(basicAnimation.fromValue!, basicAnimation.toValue!) + basicAnimation.toValue = makeAdditive(basicAnimation.toValue!, basicAnimation.toValue!) + basicAnimation.isAdditive = true + + } else if let keyframeAnimation = animation as? CAKeyframeAnimation { + let lastValue = keyframeAnimation.values!.last! + keyframeAnimation.values = keyframeAnimation.values!.map { makeAdditive($0, lastValue) } + keyframeAnimation.isAdditive = true + } } // Core Animation springs do not support multi-dimensional velocity, so we bear the burden From b8620649aae2eadf93ec66c82b164759a067931d Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Mon, 27 Mar 2017 18:59:29 -0700 Subject: [PATCH 09/30] Simplify the interactive push back transition example. Summary: Rather than implement two separate springs for scale and position, we now connect the scale directly to the position property. I was also able to remove the valve operator because of fixes to the underlying property connection architecture. Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, chuga Reviewed By: O4 Material Apple platform reviewers, chuga Tags: #material_motion Differential Revision: http://codereview.cc/D2968 --- ...InteractivePushBackTransitionExample.swift | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/examples/InteractivePushBackTransitionExample.swift b/examples/InteractivePushBackTransitionExample.swift index 86edfb9..9223f05 100644 --- a/examples/InteractivePushBackTransitionExample.swift +++ b/examples/InteractivePushBackTransitionExample.swift @@ -81,31 +81,20 @@ private class PushBackTransition: Transition { let movement = TransitionSpring(back: backPosition, fore: forePosition, direction: ctx.direction) - let scaleSpring = TransitionSpring(back: 1, fore: 0.95, direction: ctx.direction) let scale = runtime.get(ctx.back.view.layer).scale - let gesture = runtime.get(draggable.nextGestureRecognizer) + let tossable = Tossable(spring: movement, draggable: draggable) + runtime.connect(runtime.get(ctx.fore.view.layer).position.y() - // The position's final value gets written to by Core Animation when the gesture ends and the - // movement spring engages. Because we're connecting position to the scale here, this would - // also cause scale to jump to its destination as well (without animating, unfortunately). - // To ensure that we don't receive this information, we valve the stream based on the gesture - // activity and ensure that we register this valve *before* committing Tossable to the - // runtime. - .valve(openWhenTrue: gesture.active()) .rewriteRange(start: movement.backwardDestination.y, end: movement.forwardDestination.y, - destinationStart: scaleSpring.backwardDestination, - destinationEnd: scaleSpring.forwardDestination), - to: scale) + destinationStart: 1, + destinationEnd: 0.95), + to: scale) - let tossable = Tossable(spring: movement, draggable: draggable) runtime.add(tossable, to: ctx.fore.view) { $0.xLocked(to: ctx.fore.view.layer.position.x) } - runtime.toggle(scaleSpring, inReactionTo: draggable) - runtime.add(scaleSpring, to: scale) - - return [tossable.spring, scaleSpring, gesture] + return [tossable] } } From c999a3a5134331e79f3cce74d2be222780155054 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Mon, 27 Mar 2017 22:32:26 -0700 Subject: [PATCH 10/30] Rename ChangeDirectionOnRelease(of:) to ChangeDirection(withVelocityOf:) Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, chuga Reviewed By: O4 Material Apple platform reviewers, chuga Tags: #material_motion Differential Revision: http://codereview.cc/D2972 --- examples/ChangeDirectionOnReleaseExample.swift | 2 +- examples/ContextualTransitionExample.swift | 2 +- examples/InteractivePushBackTransitionExample.swift | 2 +- examples/ModalDialogExample.swift | 2 +- .../{ChangeDirectionOnRelease.swift => ChangeDirection.swift} | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) rename src/interactions/{ChangeDirectionOnRelease.swift => ChangeDirection.swift} (91%) diff --git a/examples/ChangeDirectionOnReleaseExample.swift b/examples/ChangeDirectionOnReleaseExample.swift index 51eee95..259d092 100644 --- a/examples/ChangeDirectionOnReleaseExample.swift +++ b/examples/ChangeDirectionOnReleaseExample.swift @@ -41,7 +41,7 @@ class ChangeDirectionOnReleaseExampleViewController: ExampleViewController { fore: CGPoint(x: view.bounds.midX, y: view.bounds.height * 6 / 10), direction: direction) let tossable = Tossable(spring: positionSpring) - runtime.add(ChangeDirectionOnRelease(of: tossable.draggable.nextGestureRecognizer, + runtime.add(ChangeDirection(withVelocityOf: tossable.draggable.nextGestureRecognizer, whenNegative: .backward, whenPositive: .forward), to: direction) diff --git a/examples/ContextualTransitionExample.swift b/examples/ContextualTransitionExample.swift index ab0b9a1..78bf679 100644 --- a/examples/ContextualTransitionExample.swift +++ b/examples/ContextualTransitionExample.swift @@ -285,7 +285,7 @@ private class PushBackTransition: Transition { .rewrite([.onExit: .backward, .onReturn: .forward]), to: ctx.direction) - runtime.add(ChangeDirectionOnRelease(of: draggable.nextGestureRecognizer), to: ctx.direction) + runtime.add(ChangeDirection(withVelocityOf: draggable.nextGestureRecognizer), to: ctx.direction) let backPosition = contextView.superview!.convert(contextView.layer.position, to: ctx.containerView()) let forePosition = foreImageView.superview!.convert(foreImageView.layer.position, to: ctx.containerView()) diff --git a/examples/InteractivePushBackTransitionExample.swift b/examples/InteractivePushBackTransitionExample.swift index 9223f05..a2a3982 100644 --- a/examples/InteractivePushBackTransitionExample.swift +++ b/examples/InteractivePushBackTransitionExample.swift @@ -72,7 +72,7 @@ private class PushBackTransition: Transition { draggable = Draggable() } - runtime.add(ChangeDirectionOnRelease(of: draggable.nextGestureRecognizer, whenNegative: .forward), + runtime.add(ChangeDirection(withVelocityOf: draggable.nextGestureRecognizer, whenNegative: .forward), to: ctx.direction) let bounds = ctx.containerView().bounds diff --git a/examples/ModalDialogExample.swift b/examples/ModalDialogExample.swift index 0e1199f..c542a88 100644 --- a/examples/ModalDialogExample.swift +++ b/examples/ModalDialogExample.swift @@ -98,7 +98,7 @@ class ModalDialogTransition: SelfDismissingTransition { let gesture = runtime.get(draggable.nextGestureRecognizer) let centerY = ctx.containerView().bounds.height / 2.0 - runtime.add(ChangeDirectionOnRelease(of: draggable.nextGestureRecognizer, whenNegative: .forward), + runtime.add(ChangeDirection(withVelocityOf: draggable.nextGestureRecognizer, whenNegative: .forward), to: ctx.direction) runtime.connect(gesture diff --git a/src/interactions/ChangeDirectionOnRelease.swift b/src/interactions/ChangeDirection.swift similarity index 91% rename from src/interactions/ChangeDirectionOnRelease.swift rename to src/interactions/ChangeDirection.swift index c803f7a..0e1dfc9 100644 --- a/src/interactions/ChangeDirectionOnRelease.swift +++ b/src/interactions/ChangeDirection.swift @@ -31,7 +31,7 @@ import UIKit Either the x or y axis can be selected. The default axis is y. */ -public final class ChangeDirectionOnRelease: Interaction { +public final class ChangeDirection: Interaction { /** The gesture recognizer that will be observed by this interaction. */ @@ -57,7 +57,7 @@ public final class ChangeDirectionOnRelease: Interaction { /** - parameter minimumVelocity: The minimum absolute velocity required to change the transition's direction. */ - public init(of gesture: UIPanGestureRecognizer, minimumVelocity: CGFloat = 100, whenNegative: TransitionDirection = .backward, whenPositive: TransitionDirection = .backward) { + public init(withVelocityOf gesture: UIPanGestureRecognizer, minimumVelocity: CGFloat = 100, whenNegative: TransitionDirection = .backward, whenPositive: TransitionDirection = .backward) { self.gesture = gesture self.minimumVelocity = minimumVelocity self.whenNegative = whenNegative From c4e0b3d0bf5c2b53e0046c08b63f0592b99b4b46 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Tue, 28 Mar 2017 09:06:16 -0700 Subject: [PATCH 11/30] Add Gesturable convenience initializer for extracting the first gesture recognizer from a sequence of gesture recognizers. Summary: Simplifies common code found in transition implementations. Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, chuga Reviewed By: O4 Material Apple platform reviewers, chuga Subscribers: chuga Tags: #material_motion Differential Revision: http://codereview.cc/D2973 --- examples/ContextualTransitionExample.swift | 8 +------- ...InteractivePushBackTransitionExample.swift | 8 +------- examples/ModalDialogExample.swift | 10 ++-------- src/protocols/Gesturable.swift | 19 +++++++++++++++++++ 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/examples/ContextualTransitionExample.swift b/examples/ContextualTransitionExample.swift index 78bf679..2ff8937 100644 --- a/examples/ContextualTransitionExample.swift +++ b/examples/ContextualTransitionExample.swift @@ -269,13 +269,7 @@ private class PushBackTransition: Transition { foreImageView.bounds.height / imageSize.height) let fitSize = CGSize(width: fitScale * imageSize.width, height: fitScale * imageSize.height) - let firstPan = ctx.gestureRecognizers.first { $0 is UIPanGestureRecognizer } - let draggable: Draggable - if let firstPan = firstPan as? UIPanGestureRecognizer { - draggable = Draggable(.withExistingRecognizer(firstPan)) - } else { - draggable = Draggable() - } + let draggable = Draggable(withFirstGestureIn: ctx.gestureRecognizers) let gesture = runtime.get(draggable.nextGestureRecognizer) runtime.connect(gesture diff --git a/examples/InteractivePushBackTransitionExample.swift b/examples/InteractivePushBackTransitionExample.swift index a2a3982..b5daec1 100644 --- a/examples/InteractivePushBackTransitionExample.swift +++ b/examples/InteractivePushBackTransitionExample.swift @@ -64,13 +64,7 @@ private class PushBackTransition: Transition { required init() {} func willBeginTransition(withContext ctx: TransitionContext, runtime: MotionRuntime) -> [Stateful] { - let firstPan = ctx.gestureRecognizers.first { $0 is UIPanGestureRecognizer } - let draggable: Draggable - if let firstPan = firstPan as? UIPanGestureRecognizer { - draggable = Draggable(.withExistingRecognizer(firstPan)) - } else { - draggable = Draggable() - } + let draggable = Draggable(withFirstGestureIn: ctx.gestureRecognizers) runtime.add(ChangeDirection(withVelocityOf: draggable.nextGestureRecognizer, whenNegative: .forward), to: ctx.direction) diff --git a/examples/ModalDialogExample.swift b/examples/ModalDialogExample.swift index c542a88..ca44606 100644 --- a/examples/ModalDialogExample.swift +++ b/examples/ModalDialogExample.swift @@ -84,17 +84,11 @@ class ModalDialogTransition: SelfDismissingTransition { let backPosition = CGPoint(x: bounds.midX, y: bounds.maxY + size.height * 3 / 4) let forePosition = CGPoint(x: bounds.midX, y: bounds.midY) - let firstPan = ctx.gestureRecognizers.first { $0 is UIPanGestureRecognizer } - let draggable: Draggable - if let firstPan = firstPan as? UIPanGestureRecognizer { - draggable = Draggable(.withExistingRecognizer(firstPan)) - } else { - draggable = Draggable() - } - let reactiveForeLayer = runtime.get(ctx.fore.view.layer) let position = reactiveForeLayer.position + let draggable = Draggable(withFirstGestureIn: ctx.gestureRecognizers) + let gesture = runtime.get(draggable.nextGestureRecognizer) let centerY = ctx.containerView().bounds.height / 2.0 diff --git a/src/protocols/Gesturable.swift b/src/protocols/Gesturable.swift index 43038d1..94dc5b5 100644 --- a/src/protocols/Gesturable.swift +++ b/src/protocols/Gesturable.swift @@ -56,6 +56,25 @@ public class Gesturable { self.init(.registerNewRecognizerToTargetView) } + /** + Initializes the interaction with the first gesture recognizer that matches the interaction's T + type. + */ + public convenience init(withFirstGestureIn gestures: O) where O: Sequence, O.Iterator.Element == UIGestureRecognizer { + var first: T? = nil + for gesture in gestures { + if let gesture = gesture as? T { + first = gesture + break + } + } + if let first = first { + self.init(.withExistingRecognizer(first)) + } else { + self.init() + } + } + public init(_ config: GesturableConfiguration) { self.config = config From ad32ba9e7200b59e799d57c0c964b19be55089c3 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Tue, 28 Mar 2017 10:35:51 -0700 Subject: [PATCH 12/30] Add topEdgeDismisserDelegate API to ViewControllerDismisser. Summary: This delegate API implements the behavior needed to build a simple "pull-down to dismiss" transition with a scroll view in play. Notably, we do not want to dismiss the view controller until the scroll view's content is flush to the top. Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, chuga Reviewed By: O4 Material Apple platform reviewers, chuga Tags: #material_motion Differential Revision: http://codereview.cc/D2974 --- ...InteractivePushBackTransitionExample.swift | 11 +++++-- src/transitions/ViewControllerDismisser.swift | 32 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/examples/InteractivePushBackTransitionExample.swift b/examples/InteractivePushBackTransitionExample.swift index b5daec1..4ffaa6b 100644 --- a/examples/InteractivePushBackTransitionExample.swift +++ b/examples/InteractivePushBackTransitionExample.swift @@ -36,7 +36,7 @@ class InteractivePushBackTransitionExampleViewController: ExampleViewController } } -private class ModalViewController: UIViewController { +private class ModalViewController: UIViewController, UIGestureRecognizerDelegate { override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) @@ -48,13 +48,20 @@ private class ModalViewController: UIViewController { fatalError("init(coder:) has not been implemented") } + var scrollView: UIScrollView! override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .primaryColor + scrollView = UIScrollView(frame: view.bounds) + scrollView.contentSize = .init(width: view.bounds.width, height: view.bounds.height * 10) + view.addSubview(scrollView) + let pan = UIPanGestureRecognizer() + pan.delegate = transitionController.dismisser.topEdgeDismisserDelegate(for: scrollView) transitionController.dismisser.dismissWhenGestureRecognizerBegins(pan) + scrollView.panGestureRecognizer.require(toFail: pan) view.addGestureRecognizer(pan) } } @@ -87,7 +94,7 @@ private class PushBackTransition: Transition { destinationEnd: 0.95), to: scale) - runtime.add(tossable, to: ctx.fore.view) { $0.xLocked(to: ctx.fore.view.layer.position.x) } + runtime.add(tossable, to: ctx.fore.view) { $0.xLocked(to: bounds.midX) } return [tossable] } diff --git a/src/transitions/ViewControllerDismisser.swift b/src/transitions/ViewControllerDismisser.swift index 883fd4e..009782c 100644 --- a/src/transitions/ViewControllerDismisser.swift +++ b/src/transitions/ViewControllerDismisser.swift @@ -33,6 +33,24 @@ public final class ViewControllerDismisser: NSObject { soloGestureRecognizers.insert(gestureRecognizer) } + /** + Returns a gesture recognizer delegate that will allow the gesture recognizer to begin only if the + provided scroll view is scrolled to the top of its content. + + The returned delegate implements gestureRecognizerShouldBegin. + */ + public func topEdgeDismisserDelegate(for scrollView: UIScrollView) -> UIGestureRecognizerDelegate { + for delegate in scrollViewTopEdgeDismisserDelegates { + if delegate.scrollView == scrollView { + return delegate + } + } + let delegate = ScrollViewTopEdgeDismisserDelegate() + delegate.scrollView = scrollView + scrollViewTopEdgeDismisserDelegates.append(delegate) + return delegate + } + @objc func gestureRecognizerDidChange(_ gestureRecognizer: UIGestureRecognizer) { if gestureRecognizer.state == .began || gestureRecognizer.state == .recognized { delegate?.dismiss() @@ -42,6 +60,20 @@ public final class ViewControllerDismisser: NSObject { weak var delegate: ViewControllerDismisserDelegate? private(set) var gestureRecognizers = Set() fileprivate var soloGestureRecognizers = Set() + + private var scrollViewTopEdgeDismisserDelegates: [ScrollViewTopEdgeDismisserDelegate] = [] +} + +private final class ScrollViewTopEdgeDismisserDelegate: NSObject, UIGestureRecognizerDelegate { + func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { + if let pan = gestureRecognizer as? UIPanGestureRecognizer, let scrollView = scrollView { + return pan.translation(in: pan.view).y > 0 + && scrollView.contentOffset.y <= -scrollView.contentInset.top + } + return false + } + + weak var scrollView: UIScrollView? } extension ViewControllerDismisser: UIGestureRecognizerDelegate { From 2655adc561181c0679f52df2ca23646abf7876cb Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Tue, 28 Mar 2017 22:00:22 -0700 Subject: [PATCH 13/30] Add SlopRegion interaction. Reviewers: O4 Material Apple platform reviewers, O2 Material Motion, #material_motion, chuga Reviewed By: O4 Material Apple platform reviewers, chuga Subscribers: chuga Tags: #material_motion Differential Revision: http://codereview.cc/D2975 --- examples/ContextualTransitionExample.swift | 11 +--- src/interactions/SlopRegion.swift | 73 ++++++++++++++++++++++ 2 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 src/interactions/SlopRegion.swift diff --git a/examples/ContextualTransitionExample.swift b/examples/ContextualTransitionExample.swift index 2ff8937..0767da9 100644 --- a/examples/ContextualTransitionExample.swift +++ b/examples/ContextualTransitionExample.swift @@ -271,14 +271,7 @@ private class PushBackTransition: Transition { let draggable = Draggable(withFirstGestureIn: ctx.gestureRecognizers) - let gesture = runtime.get(draggable.nextGestureRecognizer) - runtime.connect(gesture - .translation(in: runtime.containerView) - .y() - .slop(size: 100) - .rewrite([.onExit: .backward, .onReturn: .forward]), - to: ctx.direction) - + runtime.add(SlopRegion(withTranslationOf: draggable.nextGestureRecognizer, size: 100), to: ctx.direction) runtime.add(ChangeDirection(withVelocityOf: draggable.nextGestureRecognizer), to: ctx.direction) let backPosition = contextView.superview!.convert(contextView.layer.position, to: ctx.containerView()) @@ -296,7 +289,7 @@ private class PushBackTransition: Transition { runtime.add(Hidden(), to: foreImageView) - return [tossable.spring, gesture, size, opacity] + return [tossable, size, opacity] } } diff --git a/src/interactions/SlopRegion.swift b/src/interactions/SlopRegion.swift new file mode 100644 index 0000000..01da615 --- /dev/null +++ b/src/interactions/SlopRegion.swift @@ -0,0 +1,73 @@ +/* + Copyright 2017-present The Material Motion Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation +import UIKit + +/** + Changes the direction of a transition when the provided pan gesture recognizer moves out of or back + into a slop region. + + **Constraints** + + Either the x or y axis can be selected. The default axis is y. + */ +public final class SlopRegion: Interaction { + /** + The gesture recognizer that will be observed by this interaction. + */ + public let gesture: UIPanGestureRecognizer + + /** + The size of the slop region. + */ + public let size: CGFloat + + public init(withTranslationOf gesture: UIPanGestureRecognizer, size: CGFloat) { + self.gesture = gesture + self.size = size + } + + /** + The axis to observe. + */ + public enum Axis { + /** + Observes the x axis. + */ + case x + + /** + Observes the y axis. + */ + case y + } + + public func add(to direction: ReactiveProperty, withRuntime runtime: MotionRuntime, constraints axis: Axis?) { + let axis = axis ?? .y + let chooseAxis: (MotionObservable) -> MotionObservable + switch axis { + case .x: + chooseAxis = { $0.x() } + case .y: + chooseAxis = { $0.y() } + } + + runtime.connect(chooseAxis(runtime.get(gesture).translation(in: runtime.containerView)) + .slop(size: size).rewrite([.onExit: .backward, .onReturn: .forward]), + to: direction) + } +} From 9e810bbf0ddce9764c76ea44dc223ccee4fca0b7 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Tue, 28 Mar 2017 15:36:07 -0700 Subject: [PATCH 14/30] Fix bug causing properties-chained-to-properties to not animate correctly. Summary: The Core Animation systems choose a unique key to refer to the animation they're emitting so that if they need to remove the animation in the future they can do so. This key is used when adding the animation to the layer. When connecting properties together, there is only one system involved and therefor one key. This causes animations to be added with the same key, which causes the previously-added animations on the same key to be replaced. This patch fixes this bug by uniquing the animation keys with the keyPath. Reviewers: O4 Material Apple platform reviewers, O2 Material Motion, #material_motion, markwei Reviewed By: O4 Material Apple platform reviewers, O2 Material Motion, #material_motion, markwei Tags: #material_motion Differential Revision: http://codereview.cc/D2976 --- src/reactivetypes/ReactiveCALayer.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/reactivetypes/ReactiveCALayer.swift b/src/reactivetypes/ReactiveCALayer.swift index 6badf21..1b83d8b 100644 --- a/src/reactivetypes/ReactiveCALayer.swift +++ b/src/reactivetypes/ReactiveCALayer.swift @@ -256,7 +256,7 @@ public func createCoreAnimationProperty(_ name: String, initialValue: T, exte CATransaction.begin() CATransaction.setCompletionBlock(info.onCompletion) - layer.add(animation, forKey: info.key) + layer.add(animation, forKey: info.key + "." + keyPath) CATransaction.commit() case .remove(let key): @@ -269,7 +269,7 @@ public func createCoreAnimationProperty(_ name: String, initialValue: T, exte strongReactiveLayer.decomposedKeys.remove(key) } else { - layer.removeAnimation(forKey: key) + layer.removeAnimation(forKey: key + "." + keyPath) } } }) From 51ee058ddc3a15164f4a3c22c522cf3e6fd280c9 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Tue, 28 Mar 2017 22:03:46 -0700 Subject: [PATCH 15/30] Avoid over-completion of chained property animations. Summary: Related to https://github.com/material-motion/material-motion-swift/issues/65 but doesn't necessarily fix it. This patch simply removes the completion handler from downstream properties. Ideally we'd aggregate all property completion together and then bubble up the net completion in a single event. Reviewers: O4 Material Apple platform reviewers, O2 Material Motion, #material_motion, markwei Reviewed By: O4 Material Apple platform reviewers, O2 Material Motion, #material_motion, markwei Subscribers: markwei Tags: #material_motion Differential Revision: http://codereview.cc/D2978 --- src/ReactiveProperty.swift | 13 ++++++++++++- src/reactivetypes/MotionObservable.swift | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/ReactiveProperty.swift b/src/ReactiveProperty.swift index 95163b8..214c0c6 100644 --- a/src/ReactiveProperty.swift +++ b/src/ReactiveProperty.swift @@ -113,8 +113,19 @@ public final class ReactiveProperty { func coreAnimation(_ event: CoreAnimationChannelEvent) { _coreAnimation?(event) + let transformedEvent: CoreAnimationChannelEvent + switch event { + case .add(var info): + // This is a hack-fix to ensure that animations don't over-complete they're connected to other + // properties. + // Related to https://github.com/material-motion/material-motion-swift/issues/65 + info.onCompletion = nil + transformedEvent = .add(info) + default: + transformedEvent = event + } for observer in observers { - observer.coreAnimation?(event) + observer.coreAnimation?(transformedEvent) } } diff --git a/src/reactivetypes/MotionObservable.swift b/src/reactivetypes/MotionObservable.swift index a91ec74..ee9a243 100644 --- a/src/reactivetypes/MotionObservable.swift +++ b/src/reactivetypes/MotionObservable.swift @@ -74,7 +74,7 @@ public struct CoreAnimationChannelAdd { /** A completion handler, fired once Core Animation reports that the animation has completed. */ - public let onCompletion: () -> Void + public var onCompletion: (() -> Void)? /** The initial velocity of the animation, if relevant. From 71f06c23ec9ef8f460ad48de6f6af540f1eec4c9 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Tue, 28 Mar 2017 15:45:04 -0700 Subject: [PATCH 16/30] Modify the PushBackTransition example to use connected properties instead of multiple springs. Summary: This helps connect the example with the interactive version which uses connected properties to build a more complex transition. Reviewers: O4 Material Apple platform reviewers, O2 Material Motion, #material_motion, markwei Reviewed By: O4 Material Apple platform reviewers, O2 Material Motion, #material_motion, markwei Tags: #material_motion Differential Revision: http://codereview.cc/D2979 --- examples/PushBackTransitionExample.swift | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/examples/PushBackTransitionExample.swift b/examples/PushBackTransitionExample.swift index 906d0cc..27cae79 100644 --- a/examples/PushBackTransitionExample.swift +++ b/examples/PushBackTransitionExample.swift @@ -66,14 +66,22 @@ private class PushBackTransition: Transition { required init() {} func willBeginTransition(withContext ctx: TransitionContext, runtime: MotionRuntime) -> [Stateful] { - let position = TransitionSpring(back: ctx.containerView().bounds.height + ctx.fore.view.layer.bounds.height / 2, - fore: ctx.containerView().bounds.midY, - direction: ctx.direction) - let scale = TransitionSpring(back: 1, fore: 0.95, direction: ctx.direction) + let bounds = ctx.containerView().bounds + let backPosition = bounds.maxY + ctx.fore.view.bounds.height / 2 + let forePosition = bounds.midY - runtime.add(position, to: runtime.get(ctx.fore.view.layer).positionY) - runtime.add(scale, to: runtime.get(ctx.back.view.layer).scale) + let movement = TransitionSpring(back: backPosition, fore: forePosition, direction: ctx.direction) - return [position, scale] + let yPosition = runtime.get(ctx.fore.view.layer).positionY + + runtime.connect(yPosition.rewriteRange(start: movement.backwardDestination, + end: movement.forwardDestination, + destinationStart: CGFloat(1), + destinationEnd: CGFloat(0.95)), + to: runtime.get(ctx.back.view.layer).scale) + + runtime.add(movement, to: yPosition) + + return [movement] } } From 5d0af5fa77b913c0706837d1f0bbf3e14ce9f1ad Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 00:46:07 -0700 Subject: [PATCH 17/30] Store interactions before adding them so that order is maintained when interactions add other interactions. Summary: As per the spec: https://material-motion.github.io/material-motion/starmap/specifications/runtime/MotionRuntime-addInteraction Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, chuga Reviewed By: O4 Material Apple platform reviewers, chuga Tags: #material_motion Differential Revision: http://codereview.cc/D2980 --- src/MotionRuntime.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MotionRuntime.swift b/src/MotionRuntime.swift index ea37d77..782abc5 100644 --- a/src/MotionRuntime.swift +++ b/src/MotionRuntime.swift @@ -61,8 +61,8 @@ public final class MotionRuntime { runtime. */ public func add(_ interaction: I, to target: I.Target, constraints: I.Constraints? = nil) { - interaction.add(to: target, withRuntime: self, constraints: constraints) interactions.append(interaction) + interaction.add(to: target, withRuntime: self, constraints: constraints) } /** From 5b1e346b86c5bde015dc1504ba5fbb5200dff95d Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 12:07:53 -0700 Subject: [PATCH 18/30] Revert deletion of Tossable initializer and deprecate it instead. Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, chuga Reviewed By: O4 Material Apple platform reviewers, chuga Tags: #material_motion Differential Revision: http://codereview.cc/D2983 --- src/interactions/Tossable.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/interactions/Tossable.swift b/src/interactions/Tossable.swift index b5e226c..de270eb 100644 --- a/src/interactions/Tossable.swift +++ b/src/interactions/Tossable.swift @@ -86,4 +86,10 @@ public final class Tossable: Interaction, Stateful { } let aggregateState = AggregateMotionState() + + // Use init(spring:draggable:) instead. + @available(*, deprecated) + public convenience init(system: @escaping SpringToStream, draggable: Draggable = Draggable()) { + self.init(spring: Spring(threshold: 1, system: system), draggable: draggable) + } } From fbb7821cfec78493afbaae7727f992054ccb64a5 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 12:11:49 -0700 Subject: [PATCH 19/30] Add deprecation message to Tossable initializer. Reviewers: O2 Material Motion, O4 Material Apple platform reviewers, #material_motion, chuga Reviewed By: O4 Material Apple platform reviewers, chuga Tags: #material_motion Differential Revision: http://codereview.cc/D2984 --- src/interactions/Tossable.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/interactions/Tossable.swift b/src/interactions/Tossable.swift index de270eb..aa0d6f9 100644 --- a/src/interactions/Tossable.swift +++ b/src/interactions/Tossable.swift @@ -87,8 +87,7 @@ public final class Tossable: Interaction, Stateful { let aggregateState = AggregateMotionState() - // Use init(spring:draggable:) instead. - @available(*, deprecated) + @available(*, deprecated, message: "Use init(spring:draggable:) instead.") public convenience init(system: @escaping SpringToStream, draggable: Draggable = Draggable()) { self.init(spring: Spring(threshold: 1, system: system), draggable: draggable) } From aa8d10a831dd54ba6a9d11f694869a62348933a8 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 11:13:36 -0700 Subject: [PATCH 20/30] Automatic changelog preparation for release. --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6daf7ef..b297c52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# #develop# + + TODO: Enumerate changes. + + # 1.0.0 Initial stable release of Material Motion. Includes: From 3a60ba6da8c7a8ffb68ec2e93ae68d598f9c3de4 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 12:03:56 -0700 Subject: [PATCH 21/30] Update CHANGELOG.md. --- CHANGELOG.md | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b297c52..a3ec3a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,117 @@ -# #develop# +# 1.1.0 - TODO: Enumerate changes. +## Breaking changes +## New deprecations + +## New features + +## Source changes + +* [Store interactions before adding them so that order is maintained when interactions add other interactions.](https://github.com/material-motion/material-motion-swift/commit/5d0af5fa77b913c0706837d1f0bbf3e14ce9f1ad) (Jeff Verkoeyen) +* [Avoid over-completion of chained property animations.](https://github.com/material-motion/material-motion-swift/commit/51ee058ddc3a15164f4a3c22c522cf3e6fd280c9) (Jeff Verkoeyen) +* [Fix bug causing properties-chained-to-properties to not animate correctly.](https://github.com/material-motion/material-motion-swift/commit/9e810bbf0ddce9764c76ea44dc223ccee4fca0b7) (Jeff Verkoeyen) +* [Add SlopRegion interaction.](https://github.com/material-motion/material-motion-swift/commit/2655adc561181c0679f52df2ca23646abf7876cb) (Jeff Verkoeyen) +* [Add topEdgeDismisserDelegate API to ViewControllerDismisser.](https://github.com/material-motion/material-motion-swift/commit/ad32ba9e7200b59e799d57c0c964b19be55089c3) (Jeff Verkoeyen) +* [Add Gesturable convenience initializer for extracting the first gesture recognizer from a sequence of gesture recognizers.](https://github.com/material-motion/material-motion-swift/commit/c4e0b3d0bf5c2b53e0046c08b63f0592b99b4b46) (Jeff Verkoeyen) +* [Rename ChangeDirectionOnRelease(of:) to ChangeDirection(withVelocityOf:)](https://github.com/material-motion/material-motion-swift/commit/c999a3a5134331e79f3cce74d2be222780155054) (Jeff Verkoeyen) +* [Fix crashing bug when connecting properties to one another.](https://github.com/material-motion/material-motion-swift/commit/840d97cd68321dd241e157ed9527cdc83ed73489) (Jeff Verkoeyen) +* [Add ChangeDirectionOnRelease interaction.](https://github.com/material-motion/material-motion-swift/commit/bdee45533c68f2c98e7b543acf9e3589a783eb46) (Jeff Verkoeyen) +* [Make TransitionSpring and Spring T type conform to Subtractable so that coreAnimation can be set as the default system.](https://github.com/material-motion/material-motion-swift/commit/419327972893b92a4317e903ad933550d096a76f) (Jeff Verkoeyen) +* [TransitionSpring configuration now defaults to Core Animation configuration defaults.](https://github.com/material-motion/material-motion-swift/commit/295d64556048429a5ec6d7859a0ce8922b84a4fd) (Jeff Verkoeyen) +* [Revert "WIP of tracer."](https://github.com/material-motion/material-motion-swift/commit/7197cb6b10f799e1689bf0d36e76f3a5f53d9021) (Jeff Verkoeyen) +* [WIP of tracer.](https://github.com/material-motion/material-motion-swift/commit/cbe6365985b3a6563cc9410e178ccef1ecea2f0d) (Jeff Verkoeyen) + +## API changes + +Auto-generated by running: + + apidiff origin/stable release-candidate swift MaterialMotion.xcworkspace MaterialMotion + +### New global constants + +*new* global var: `defaultTransitionSpringFriction` + +*new* global var: `defaultTransitionSpringSuggestedDuration` + +*new* global var: `defaultTransitionSpringTension` + +*new* global var: `defaultTransitionSpringMass` + +### New interactions + +*new* class: `ChangeDirection` + +*new* class: `SlopRegion` + +### Modified interactions + +#### Gesturable + +Affects `Draggable`, `Rotatable`, and `Scalable`. + +*new* method: `init(withFirstGestureIn:)` in `Gesturable` + +#### Spring + +| Type of change: | Declaration | +|---|---| +| From: | `public class Spring : Interaction, Togglable, Stateful where T : Zeroable` | +| To: | `public class Spring : Interaction, Togglable, Stateful where T : Subtractable, T : Zeroable` | + +*modified* method: `init(threshold:system:)` in `Spring` + +| Type of change: | Declaration | +|---|---| +| From: | `public init(threshold: CGFloat, system: @escaping SpringToStream)` | +| To: | `public init(threshold: CGFloat = 1, system: @escaping SpringToStream = coreAnimation)` | + +#### Tossable + +*modified* method: `init(spring:draggable:)` in `Tossable` + +| Type of change: | Declaration | +|---|---| +| From: | `public init(spring: Spring, draggable: Draggable = Draggable())` | +| To: | `public init(spring: Spring = Spring(), draggable: Draggable = Draggable())` | + +TODO: Revert this change: *removed* method: `init(system:draggable:)` in `Tossable` + +#### TransitionSpring + +*modified* class: `TransitionSpring` + +| Type of change: | Declaration | +|---|---| +| From: | `public final class TransitionSpring : Spring where T : Zeroable` | +| To: | `public final class TransitionSpring : Spring where T : Subtractable, T : Zeroable` | + +*modified* method: `init(back:fore:direction:threshold:system:)` in `TransitionSpring` + +| Type of change: | Declaration | +|---|---| +| From: | `public init(back backwardDestination: T, fore forwardDestination: T, direction: ReactiveProperty, threshold: CGFloat, system: @escaping SpringToStream)` | +| To: | `public init(back backwardDestination: T, fore forwardDestination: T, direction: ReactiveProperty, threshold: CGFloat = default, system: @escaping SpringToStream = default)` | + +### Transitions + +#### ViewControllerDismisser + +*new* method: `topEdgeDismisserDelegate(for:)` in `ViewControllerDismisser` + +### Stream changes + +*new* var: `onCompletion` in `CoreAnimationChannelAdd` + +*removed* var: `onCompletion` in `CoreAnimationChannelAdd` + +## Non-source changes + +* [Automatic changelog preparation for release.](https://github.com/material-motion/material-motion-swift/commit/a7e274a4f2603ea67bd6ee6ccb8fd573da7b3078) (Jeff Verkoeyen) +* [Modify the PushBackTransition example to use connected properties instead of multiple springs.](https://github.com/material-motion/material-motion-swift/commit/71f06c23ec9ef8f460ad48de6f6af540f1eec4c9) (Jeff Verkoeyen) +* [Simplify the interactive push back transition example.](https://github.com/material-motion/material-motion-swift/commit/b8620649aae2eadf93ec66c82b164759a067931d) (Jeff Verkoeyen) +* [Add syntax highlighting languages to the README.](https://github.com/material-motion/material-motion-swift/commit/486cff7dc497a66c5479f8117a599cf778fa575a) (Jeff Verkoeyen) +* [Add example Podfile to the README.](https://github.com/material-motion/material-motion-swift/commit/687e6cc01dc82bd114a5f4f913cee54dc5071806) (Jeff Verkoeyen) # 1.0.0 From 0f4462fc0a0e0712fba2f3feff2c179d4555dbdb Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 12:11:36 -0700 Subject: [PATCH 22/30] Remove TODO. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3ec3a5..4cb1f23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -75,7 +75,7 @@ Affects `Draggable`, `Rotatable`, and `Scalable`. | From: | `public init(spring: Spring, draggable: Draggable = Draggable())` | | To: | `public init(spring: Spring = Spring(), draggable: Draggable = Draggable())` | -TODO: Revert this change: *removed* method: `init(system:draggable:)` in `Tossable` +*deprecated* method: `init(system:draggable:)` in `Tossable`. Use `init(spring:draggable:)` instead. #### TransitionSpring From 2c40483ea65740d7c1d65913cf685df0a7beec2b Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 12:23:16 -0700 Subject: [PATCH 23/30] Add release notes. --- CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cb1f23..a5b6fcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,41 @@ # 1.1.0 +This is our first minor release. It includes two new interactions and improvements to APIs for the common cases. + ## Breaking changes +No known breaking changes. + +## Behavioral changes + +- TransitionSpring's configuration now defaults to Core Animation's default values. If you prefer to continue using the original Spring defaults you can use the following snippet: + +```swift +spring.tension.value = defaultSpringTension +spring.friction.value = defaultSpringFriction +spring.mass.value = defaultSpringMass +spring.suggestedDuration.value = 0 +``` + ## New deprecations +- Tossable's `init(system:draggable:)` is deprecated in favor of `init(spring:draggable:)`. + ## New features +New interactions: `ChangeDirection` and `SlopRegion`. + +Gesturable interactions can now be initialized with a sequence of gesture recognizers. This makes it easier to create gesturable interactions in transitions where the gesture recognizers are provided as a set. + +Spring's system now defaults to Core Animation. + +There is a new API for getting a gesture recognizer delegate that's able to coordinate a "drag to dismiss" transition with a vertical scroll view. + +```swift +let pan = UIPanGestureRecognizer() +pan.delegate = transitionController.dismisser.topEdgeDismisserDelegate(for: scrollView) +``` + ## Source changes * [Store interactions before adding them so that order is maintained when interactions add other interactions.](https://github.com/material-motion/material-motion-swift/commit/5d0af5fa77b913c0706837d1f0bbf3e14ce9f1ad) (Jeff Verkoeyen) From 357d6ab42d926b2eb4573cf394d3a98767c82727 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 12:37:34 -0700 Subject: [PATCH 24/30] Add pull down to dismiss case study. --- README.md | 10 ++++++++++ assets/pulldowntodismiss.gif | Bin 0 -> 90496 bytes 2 files changed, 10 insertions(+) create mode 100644 assets/pulldowntodismiss.gif diff --git a/README.md b/README.md index 6a80dac..067fb24 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,16 @@ Makes use of: `Tossable` and `TransitionSpring`. [View the source](examples/ModalDialogExample.swift). +### Pull down to dismiss + + + +A modal scroll view controller that can be dismissed with a drag gesture. + +Makes use of: `Tossable` and `TransitionSpring`. + +[View the source](examples/InteractivePushBackTransitionExample.swift). + ### Sticker picker diff --git a/assets/pulldowntodismiss.gif b/assets/pulldowntodismiss.gif new file mode 100644 index 0000000000000000000000000000000000000000..7711bd113fcf9e115cc4fd6c953da7d0169e9728 GIT binary patch literal 90496 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%0D(6ySCT4w-2$lxfL+MEJYn|Uy` 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 Date: Wed, 29 Mar 2017 12:59:58 -0700 Subject: [PATCH 25/30] Add ChangeDirection interaction to README. --- README.md | 6 ++++++ assets/changedirection.gif | Bin 0 -> 193795 bytes 2 files changed, 6 insertions(+) create mode 100644 assets/changedirection.gif diff --git a/README.md b/README.md index 067fb24..2856328 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,12 @@ arcMove.from.value = <#from#> arcMove.to.value = <#to#> runtime.add(arcMove, to: <#view#>) + + +

ChangeDirection
+
runtime.add(ChangeDirection(withVelocityOf: gesture),
+            to: <#view#>)
+
DirectlyManipulable
diff --git a/assets/changedirection.gif b/assets/changedirection.gif new file mode 100644 index 0000000000000000000000000000000000000000..0970b858f181f9ef51c727a61dcd0670fe2184e9 GIT binary patch literal 193795 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 literal 0 HcmV?d00001 From cb0f12824d23e6bfbd943ed922f11a978159fb76 Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 13:00:56 -0700 Subject: [PATCH 26/30] Add images to changelog release notes. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5b6fcd..4bdf610 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ This is our first minor release. It includes two new interactions and improvements to APIs for the common cases. + + ## Breaking changes No known breaking changes. From e801d4961229dd05e7206eb620f2b81865ec16ef Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 13:17:38 -0700 Subject: [PATCH 27/30] Remove breaking changes section. --- CHANGELOG.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bdf610..07ce385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,6 @@ This is our first minor release. It includes two new interactions and improvemen -## Breaking changes - -No known breaking changes. - ## Behavioral changes - TransitionSpring's configuration now defaults to Core Animation's default values. If you prefer to continue using the original Spring defaults you can use the following snippet: From 6b22b3866aa513540c46810066bde7dbce7fa4cc Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 13:18:31 -0700 Subject: [PATCH 28/30] Remove tracer commits. --- CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07ce385..78a527c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,8 +47,6 @@ pan.delegate = transitionController.dismisser.topEdgeDismisserDelegate(for: scro * [Add ChangeDirectionOnRelease interaction.](https://github.com/material-motion/material-motion-swift/commit/bdee45533c68f2c98e7b543acf9e3589a783eb46) (Jeff Verkoeyen) * [Make TransitionSpring and Spring T type conform to Subtractable so that coreAnimation can be set as the default system.](https://github.com/material-motion/material-motion-swift/commit/419327972893b92a4317e903ad933550d096a76f) (Jeff Verkoeyen) * [TransitionSpring configuration now defaults to Core Animation configuration defaults.](https://github.com/material-motion/material-motion-swift/commit/295d64556048429a5ec6d7859a0ce8922b84a4fd) (Jeff Verkoeyen) -* [Revert "WIP of tracer."](https://github.com/material-motion/material-motion-swift/commit/7197cb6b10f799e1689bf0d36e76f3a5f53d9021) (Jeff Verkoeyen) -* [WIP of tracer.](https://github.com/material-motion/material-motion-swift/commit/cbe6365985b3a6563cc9410e178ccef1ecea2f0d) (Jeff Verkoeyen) ## API changes From 066f23be48e5bb04c961d8e01a7eb0b02952bcdc Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 13:18:58 -0700 Subject: [PATCH 29/30] Remove redundant commit message. --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78a527c..9923f79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -133,7 +133,6 @@ Affects `Draggable`, `Rotatable`, and `Scalable`. ## Non-source changes -* [Automatic changelog preparation for release.](https://github.com/material-motion/material-motion-swift/commit/a7e274a4f2603ea67bd6ee6ccb8fd573da7b3078) (Jeff Verkoeyen) * [Modify the PushBackTransition example to use connected properties instead of multiple springs.](https://github.com/material-motion/material-motion-swift/commit/71f06c23ec9ef8f460ad48de6f6af540f1eec4c9) (Jeff Verkoeyen) * [Simplify the interactive push back transition example.](https://github.com/material-motion/material-motion-swift/commit/b8620649aae2eadf93ec66c82b164759a067931d) (Jeff Verkoeyen) * [Add syntax highlighting languages to the README.](https://github.com/material-motion/material-motion-swift/commit/486cff7dc497a66c5479f8117a599cf778fa575a) (Jeff Verkoeyen) From a5e1ffea188016cbc7ab50bbd4ead9b5814f018f Mon Sep 17 00:00:00 2001 From: Jeff Verkoeyen Date: Wed, 29 Mar 2017 13:19:19 -0700 Subject: [PATCH 30/30] Bump the version to 1.1.0 --- .jazzy.yaml | 4 ++-- MaterialMotion.podspec | 2 +- Podfile.lock | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.jazzy.yaml b/.jazzy.yaml index c89f7d1..f7f62c3 100644 --- a/.jazzy.yaml +++ b/.jazzy.yaml @@ -1,5 +1,5 @@ module: MaterialMotion -module_version: 1.0.0 +module_version: 1.1.0 sdk: iphonesimulator xcodebuild_arguments: - -workspace @@ -7,4 +7,4 @@ xcodebuild_arguments: - -scheme - MaterialMotion github_url: https://github.com/material-motion/material-motion-swift -github_file_prefix: https://github.com/material-motion/material-motion-swift/tree/v1.0.0 +github_file_prefix: https://github.com/material-motion/material-motion-swift/tree/v1.1.0 diff --git a/MaterialMotion.podspec b/MaterialMotion.podspec index 972a60b..d4c168b 100644 --- a/MaterialMotion.podspec +++ b/MaterialMotion.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "MaterialMotion" s.summary = "Reactive motion driven by Core Animation." - s.version = "1.0.0" + s.version = "1.1.0" s.authors = "The Material Motion Authors" s.license = "Apache 2.0" s.homepage = "https://github.com/material-motion/material-motion-swift" diff --git a/Podfile.lock b/Podfile.lock index 3652598..9b6bb85 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -3,7 +3,7 @@ PODS: - IndefiniteObservable (3.1.0): - IndefiniteObservable/lib (= 3.1.0) - IndefiniteObservable/lib (3.1.0) - - MaterialMotion (1.0.0): + - MaterialMotion (1.1.0): - IndefiniteObservable (~> 3.0) DEPENDENCIES: @@ -17,7 +17,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: CatalogByConvention: be55c2263132e4f9f59299ac8a528ee8715b3275 IndefiniteObservable: 2789d61f487d8d37fa2b9c3153cc44d4447ff744 - MaterialMotion: 967eed88a2f4add305ea8768bbc49283283c1e83 + MaterialMotion: 6ee4d44d39b074686d603c26c20a5816afdb50cd PODFILE CHECKSUM: f503265a0d60526a0d28c96dd4bdcfb40fb562fc