From 9b1d49289451df9be6f212ab33f5017bb6b0a907 Mon Sep 17 00:00:00 2001 From: Muukii Date: Thu, 28 Apr 2022 03:10:15 +0900 Subject: [PATCH 1/3] :evergreen_tree: Update --- .../DemoSheetViewController.swift | 6 ++-- .../Helper/FluidExtentionViewController.swift | 16 +++++++++ .../ViewController/File.swift | 36 +++++++++++++++++++ 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 Sources/FluidInterfaceKit/ViewController/File.swift diff --git a/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift b/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift index a933e6216..04018a6a1 100644 --- a/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift +++ b/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift @@ -30,7 +30,7 @@ private final class ListViewController: CodeBasedViewController { let controller = DetailViewController() - fluidPush(controller, target: .current, relation: .modality) + fluidPush(controller, target: .current) print("hey") } @@ -73,12 +73,12 @@ private final class ListViewController: CodeBasedViewController { } } -private final class DetailViewController: FluidViewController { +private final class DetailViewController: FluidSheetViewController { override func viewDidLoad() { super.viewDidLoad() - view.backgroundColor = .neon(.purple) + contentView.backgroundColor = .neon(.purple) } } diff --git a/Sources/FluidInterfaceKit/Helper/FluidExtentionViewController.swift b/Sources/FluidInterfaceKit/Helper/FluidExtentionViewController.swift index 8ac8a93f9..b660288fe 100644 --- a/Sources/FluidInterfaceKit/Helper/FluidExtentionViewController.swift +++ b/Sources/FluidInterfaceKit/Helper/FluidExtentionViewController.swift @@ -78,6 +78,22 @@ extension FluidExtentionViewController { } + public func fluidPush( + _ viewController: FluidSheetViewController, + target strategy: UIViewController.FluidStackFindStrategy, + transition: AnyAddingTransition? = nil, + completion: ((AddingTransitionContext.CompletionEvent) -> Void)? = nil + ) { + + fluidPushUnsafely( + viewController, + target: strategy, + transition: transition, + afterViewDidLoad: {} + ) + + } + public func fluidPush( _ viewController: FluidPopoverViewController, target strategy: UIViewController.FluidStackFindStrategy, diff --git a/Sources/FluidInterfaceKit/ViewController/File.swift b/Sources/FluidInterfaceKit/ViewController/File.swift new file mode 100644 index 000000000..3a648c641 --- /dev/null +++ b/Sources/FluidInterfaceKit/ViewController/File.swift @@ -0,0 +1,36 @@ +import UIKit + +open class FluidSheetViewController: FluidTransitionViewController { + + public enum Content { + case viewController(UIViewController) + case view(UIView) + } + + public let contentView: UIView = .init() + + private let __content: Content? + + public init( + content: Content? = nil, + addingTransition: AnyAddingTransition? = nil, + removingTransition: AnyRemovingTransition? = nil + ) { + + self.__content = content + + super.init( + content: nil, + addingTransition: addingTransition, + removingTransition: removingTransition + ) + + } + + open override func viewDidLoad() { + super.viewDidLoad() + + + + } +} From 5daaa94d827ac17a560da95651056101f4a5d7f6 Mon Sep 17 00:00:00 2001 From: Muukii Date: Mon, 2 May 2022 00:40:18 +0900 Subject: [PATCH 2/3] :evergreen_tree: Update --- Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift | 1 + submodules/CompositionKit | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift b/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift index 04018a6a1..067be6f5d 100644 --- a/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift +++ b/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift @@ -79,6 +79,7 @@ private final class DetailViewController: FluidSheetViewController { super.viewDidLoad() contentView.backgroundColor = .neon(.purple) + } } diff --git a/submodules/CompositionKit b/submodules/CompositionKit index fbc9c7777..22116d53d 160000 --- a/submodules/CompositionKit +++ b/submodules/CompositionKit @@ -1 +1 @@ -Subproject commit fbc9c7777cdf8a16ff51ae18e8ac325ced25c3fd +Subproject commit 22116d53dab7722bf0c89dca0eee5a08384d614a From 65b2a2b092a74326665ce6433f73351bdbffbeac Mon Sep 17 00:00:00 2001 From: Muukii Date: Sun, 8 May 2022 01:43:12 +0900 Subject: [PATCH 3/3] :zap: WIP --- .../DemoSheetViewController.swift | 55 +++++++++++---- .../ViewController/File.swift | 67 ++++++++++++++++--- 2 files changed, 97 insertions(+), 25 deletions(-) diff --git a/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift b/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift index 067be6f5d..49a36b30e 100644 --- a/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift +++ b/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift @@ -78,23 +78,50 @@ private final class DetailViewController: FluidSheetViewController { override func viewDidLoad() { super.viewDidLoad() - contentView.backgroundColor = .neon(.purple) + view.backgroundColor = .systemBackground + + let horizontalContent = ScrollableContainerView(scrollDirection: .horizontal) - } -} - -extension AnyRemovingInteraction { - - static var sheet: Self { + horizontalContent.setContent(AnyView { _ in + HStackBlock(spacing: 8) { + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + } + }) - return .init(handlers: [ - .gestureOnScreen(handler: { gesture, context in - + let verticalContent = ScrollableContainerView(scrollDirection: .vertical) - - }) - ]) + verticalContent.setContent(AnyView { _ in + VStackBlock(spacing: 8) { + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + UIView.mock(backgroundColor: .neon(.purple), preferredSize: .init(width: 60, height: 60)) + } + }) + Mondrian.buildSubviews(on: view) { + VStackBlock { + horizontalContent + + verticalContent + } + .container(respectingSafeAreaEdges: .all) + } } - } + diff --git a/Sources/FluidInterfaceKit/ViewController/File.swift b/Sources/FluidInterfaceKit/ViewController/File.swift index 3a648c641..349c45223 100644 --- a/Sources/FluidInterfaceKit/ViewController/File.swift +++ b/Sources/FluidInterfaceKit/ViewController/File.swift @@ -1,30 +1,26 @@ import UIKit -open class FluidSheetViewController: FluidTransitionViewController { +open class FluidSheetViewController: FluidGestureHandlingViewController { public enum Content { case viewController(UIViewController) case view(UIView) } - - public let contentView: UIView = .init() - - private let __content: Content? - + public init( - content: Content? = nil, addingTransition: AnyAddingTransition? = nil, removingTransition: AnyRemovingTransition? = nil ) { - self.__content = content - super.init( content: nil, - addingTransition: addingTransition, - removingTransition: removingTransition + addingTransition: addingTransition ?? .sheet, + removingTransition: removingTransition ?? .sheet, + removingInteraction: .sheet ) + fluidStackContentConfiguration.contentType = .overlay + } open override func viewDidLoad() { @@ -34,3 +30,52 @@ open class FluidSheetViewController: FluidTransitionViewController { } } + +extension AnyAddingTransition { + + public static var sheet: Self { + return .modalStyle + } + +} + +extension AnyRemovingTransition { + + public static var sheet: Self { + return .modalStyle + } + +} + +extension AnyRemovingInteraction { + + public static var sheet: Self { + + return .init(handlers: [ + .gestureOnScreen(handler: { gesture, context in + + let targetViewController = context.viewController + let targetView = targetViewController.view! + + switch gesture.state { + case .possible: + break + case .began, .changed: + let translation = gesture.translation(in: nil) + targetView.layer.transform = CATransform3DMakeAffineTransform(CGAffineTransform(translationX: 0, y: translation.y)) + + case .ended: + break + case .cancelled, .failed: + break + @unknown default: + assertionFailure() + break + } + + }) + ]) + + } + +}