diff --git a/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift b/Sources/FluidInterfaceKit-Demo/DemoSheetViewController.swift index a933e6216..49a36b30e 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,27 +73,55 @@ private final class ListViewController: CodeBasedViewController { } } -private final class DetailViewController: FluidViewController { +private final class DetailViewController: FluidSheetViewController { override func viewDidLoad() { super.viewDidLoad() - view.backgroundColor = .neon(.purple) - } -} - -extension AnyRemovingInteraction { - - static var sheet: Self { - - return .init(handlers: [ - .gestureOnScreen(handler: { gesture, context in - + view.backgroundColor = .systemBackground + let horizontalContent = ScrollableContainerView(scrollDirection: .horizontal) + + 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)) + } + }) + + 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/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..349c45223 --- /dev/null +++ b/Sources/FluidInterfaceKit/ViewController/File.swift @@ -0,0 +1,81 @@ +import UIKit + +open class FluidSheetViewController: FluidGestureHandlingViewController { + + public enum Content { + case viewController(UIViewController) + case view(UIView) + } + + public init( + addingTransition: AnyAddingTransition? = nil, + removingTransition: AnyRemovingTransition? = nil + ) { + + super.init( + content: nil, + addingTransition: addingTransition ?? .sheet, + removingTransition: removingTransition ?? .sheet, + removingInteraction: .sheet + ) + + fluidStackContentConfiguration.contentType = .overlay + + } + + open override func viewDidLoad() { + super.viewDidLoad() + + + + } +} + +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 + } + + }) + ]) + + } + +} 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