diff --git a/Examples/Samples/Sources/ContentViewControllers/DebugTableViewController.swift b/Examples/Samples/Sources/ContentViewControllers/DebugTableViewController.swift index 7d1230b..eb11149 100644 --- a/Examples/Samples/Sources/ContentViewControllers/DebugTableViewController.swift +++ b/Examples/Samples/Sources/ContentViewControllers/DebugTableViewController.swift @@ -53,6 +53,7 @@ class DebugTableViewController: InspectableViewController { // MARK: - Properties + var fpc: FloatingPanelController? var kvoObservers: [NSKeyValueObservation] = [] private lazy var items: [String] = { let items = (0..<100).map { "Items \($0)" } @@ -250,6 +251,7 @@ extension DebugTableViewController: UITableViewDataSource { extension DebugTableViewController: UITableViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { + fpc?.trackingScrollViewDidScroll() print("TableView --- ", scrollView.contentOffset, scrollView.contentInset) } diff --git a/Examples/Samples/Sources/UseCases/UseCaseController.swift b/Examples/Samples/Sources/UseCases/UseCaseController.swift index 3d6f7a8..1e70446 100644 --- a/Examples/Samples/Sources/UseCases/UseCaseController.swift +++ b/Examples/Samples/Sources/UseCases/UseCaseController.swift @@ -375,6 +375,7 @@ private extension FloatingPanelController { self?.panGestureRecognizer.isEnabled = !tableView.isEditing } contentVC.kvoObservers.append(ob) + contentVC.fpc = self track(scrollView: contentVC.tableView) case let contentVC as NestedScrollViewController: diff --git a/Sources/Controller.swift b/Sources/Controller.swift index a76278b..8555667 100644 --- a/Sources/Controller.swift +++ b/Sources/Controller.swift @@ -594,6 +594,12 @@ open class FloatingPanelController: UIViewController { break } } + + /// Tracks the specified scroll view scrolling. + /// + public func trackingScrollViewDidScroll() { + floatingPanel.trackingScrollViewDidScroll() + } /// Cancel tracking the specify scroll view. /// diff --git a/Sources/Core.swift b/Sources/Core.swift index 2e1efd1..4880d51 100644 --- a/Sources/Core.swift +++ b/Sources/Core.swift @@ -1007,6 +1007,22 @@ class Core: NSObject, UIGestureRecognizerDelegate { } // MARK: - ScrollView handling + + func trackingScrollViewDidScroll() { + guard let scrollView = scrollView else { + return + } + let contentOffset = scrollView.contentOffset.y + guard contentOffset < 0, layoutAdapter.position == .bottom, state == layoutAdapter.mostExpandedState else { + if surfaceView.transform != .identity { + surfaceView.transform = .identity + scrollView.transform = .identity + } + return + } + surfaceView.transform = CGAffineTransform(translationX: 0, y: -contentOffset) + scrollView.transform = CGAffineTransform(translationX: 0, y: contentOffset) + } private func lockScrollView() { guard let scrollView = scrollView else { return }