Skip to content

Commit d3c30b3

Browse files
authored
track scroll view bouncing (#525)
1 parent 8bb3795 commit d3c30b3

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

Examples/Samples/Sources/ContentViewControllers/DebugTableViewController.swift

+2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class DebugTableViewController: InspectableViewController {
5353

5454
// MARK: - Properties
5555

56+
var fpc: FloatingPanelController?
5657
var kvoObservers: [NSKeyValueObservation] = []
5758
private lazy var items: [String] = {
5859
let items = (0..<100).map { "Items \($0)" }
@@ -250,6 +251,7 @@ extension DebugTableViewController: UITableViewDataSource {
250251

251252
extension DebugTableViewController: UITableViewDelegate {
252253
func scrollViewDidScroll(_ scrollView: UIScrollView) {
254+
fpc?.trackingScrollViewDidScroll()
253255
print("TableView --- ", scrollView.contentOffset, scrollView.contentInset)
254256
}
255257

Examples/Samples/Sources/UseCases/UseCaseController.swift

+1
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ private extension FloatingPanelController {
375375
self?.panGestureRecognizer.isEnabled = !tableView.isEditing
376376
}
377377
contentVC.kvoObservers.append(ob)
378+
contentVC.fpc = self
378379
track(scrollView: contentVC.tableView)
379380

380381
case let contentVC as NestedScrollViewController:

Sources/Controller.swift

+6
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,12 @@ open class FloatingPanelController: UIViewController {
594594
break
595595
}
596596
}
597+
598+
/// Tracks the specified scroll view scrolling.
599+
///
600+
public func trackingScrollViewDidScroll() {
601+
floatingPanel.trackingScrollViewDidScroll()
602+
}
597603

598604
/// Cancel tracking the specify scroll view.
599605
///

Sources/Core.swift

+16
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,22 @@ class Core: NSObject, UIGestureRecognizerDelegate {
10071007
}
10081008

10091009
// MARK: - ScrollView handling
1010+
1011+
func trackingScrollViewDidScroll() {
1012+
guard let scrollView = scrollView else {
1013+
return
1014+
}
1015+
let contentOffset = scrollView.contentOffset.y
1016+
guard contentOffset < 0, layoutAdapter.position == .bottom, state == layoutAdapter.mostExpandedState else {
1017+
if surfaceView.transform != .identity {
1018+
surfaceView.transform = .identity
1019+
scrollView.transform = .identity
1020+
}
1021+
return
1022+
}
1023+
surfaceView.transform = CGAffineTransform(translationX: 0, y: -contentOffset)
1024+
scrollView.transform = CGAffineTransform(translationX: 0, y: contentOffset)
1025+
}
10101026

10111027
private func lockScrollView() {
10121028
guard let scrollView = scrollView else { return }

0 commit comments

Comments
 (0)