Skip to content

Commit

Permalink
Merge pull request #80 from applidium/feature/tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gaetanzanella authored Apr 22, 2021
2 parents 9043fd8 + c88d5e2 commit 947293d
Show file tree
Hide file tree
Showing 11 changed files with 982 additions and 8 deletions.
32 changes: 32 additions & 0 deletions OverlayContainer.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@
E78486542201EA9400DE64C3 /* OverlayNotchHeightTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E78485C42201E66500DE64C3 /* OverlayNotchHeightTest.swift */; };
E791BAA4225F284800124D27 /* GroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E791BAA3225F284800124D27 /* GroundView.swift */; };
E791BAAD225F771400124D27 /* CGFloat+Round.swift in Sources */ = {isa = PBXBuildFile; fileRef = E791BAAC225F771400124D27 /* CGFloat+Round.swift */; };
E79AE411262F095000BFFBF3 /* RushingForwardTargetNotchPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE40B262F094600BFFBF3 /* RushingForwardTargetNotchPolicyTests.swift */; };
E79AE41A262F12E800BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE414262F12DF00BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift */; };
E79AE426262F40A800BFFBF3 /* ScrollViewEmulator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE41E262F40A000BFFBF3 /* ScrollViewEmulator.swift */; };
E79AE42F2630282800BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE4292630282400BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift */; };
E79AE438263029AE00BFFBF3 /* FakeOverlayTranslationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE4322630286F00BFFBF3 /* FakeOverlayTranslationController.swift */; };
E79AE443263033F200BFFBF3 /* HeightConstraintOverlayTranslationControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE43B26302EEA00BFFBF3 /* HeightConstraintOverlayTranslationControllerTests.swift */; };
E79D75E126035ED900C942F7 /* Quick.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E79D75DF26035ED900C942F7 /* Quick.xcframework */; };
E79D75E226035ED900C942F7 /* Nimble.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E79D75E026035ED900C942F7 /* Nimble.xcframework */; };
E7A6A3AC24460D1A00E51F7A /* OverlayContainerSheetDismissalPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7A6A3AA24460B5E00E51F7A /* OverlayContainerSheetDismissalPolicyTest.swift */; };
Expand Down Expand Up @@ -117,6 +123,12 @@
E78A7A582603424B0088569A /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
E791BAA3225F284800124D27 /* GroundView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroundView.swift; sourceTree = "<group>"; };
E791BAAC225F771400124D27 /* CGFloat+Round.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGFloat+Round.swift"; sourceTree = "<group>"; };
E79AE40B262F094600BFFBF3 /* RushingForwardTargetNotchPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RushingForwardTargetNotchPolicyTests.swift; sourceTree = "<group>"; };
E79AE414262F12DF00BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollViewOverlayTranslationDriverTests.swift; sourceTree = "<group>"; };
E79AE41E262F40A000BFFBF3 /* ScrollViewEmulator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollViewEmulator.swift; sourceTree = "<group>"; };
E79AE4292630282400BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PanGestureOverlayTranslationDriverTests.swift; sourceTree = "<group>"; };
E79AE4322630286F00BFFBF3 /* FakeOverlayTranslationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeOverlayTranslationController.swift; sourceTree = "<group>"; };
E79AE43B26302EEA00BFFBF3 /* HeightConstraintOverlayTranslationControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeightConstraintOverlayTranslationControllerTests.swift; sourceTree = "<group>"; };
E79D75DF26035ED900C942F7 /* Quick.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Quick.xcframework; path = Carthage/Build/Quick.xcframework; sourceTree = "<group>"; };
E79D75E026035ED900C942F7 /* Nimble.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Nimble.xcframework; path = Carthage/Build/Nimble.xcframework; sourceTree = "<group>"; };
E7A6A3AA24460B5E00E51F7A /* OverlayContainerSheetDismissalPolicyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayContainerSheetDismissalPolicyTest.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -265,15 +277,29 @@
E78485C12201E66500DE64C3 /* Tests */ = {
isa = PBXGroup;
children = (
E79AE41D262F408F00BFFBF3 /* Utils */,
E78485C22201E66500DE64C3 /* OverlayScrollViewDelegateTest.swift */,
E78485C32201E66500DE64C3 /* OverlayInsertionTest.swift */,
E78485C42201E66500DE64C3 /* OverlayNotchHeightTest.swift */,
E7A6A3AA24460B5E00E51F7A /* OverlayContainerSheetDismissalPolicyTest.swift */,
E79AE40B262F094600BFFBF3 /* RushingForwardTargetNotchPolicyTests.swift */,
E79AE414262F12DF00BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift */,
E79AE4292630282400BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift */,
E79AE43B26302EEA00BFFBF3 /* HeightConstraintOverlayTranslationControllerTests.swift */,
E78485C52201E66500DE64C3 /* Info.plist */,
);
path = Tests;
sourceTree = "<group>";
};
E79AE41D262F408F00BFFBF3 /* Utils */ = {
isa = PBXGroup;
children = (
E79AE41E262F40A000BFFBF3 /* ScrollViewEmulator.swift */,
E79AE4322630286F00BFFBF3 /* FakeOverlayTranslationController.swift */,
);
path = Utils;
sourceTree = "<group>";
};
E7B22ABC22A182E6009392EC /* Configuration */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -445,7 +471,13 @@
files = (
E7A6A3AC24460D1A00E51F7A /* OverlayContainerSheetDismissalPolicyTest.swift in Sources */,
E78486522201EA9400DE64C3 /* OverlayScrollViewDelegateTest.swift in Sources */,
E79AE411262F095000BFFBF3 /* RushingForwardTargetNotchPolicyTests.swift in Sources */,
E79AE426262F40A800BFFBF3 /* ScrollViewEmulator.swift in Sources */,
E78486532201EA9400DE64C3 /* OverlayInsertionTest.swift in Sources */,
E79AE41A262F12E800BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift in Sources */,
E79AE42F2630282800BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift in Sources */,
E79AE438263029AE00BFFBF3 /* FakeOverlayTranslationController.swift in Sources */,
E79AE443263033F200BFFBF3 /* HeightConstraintOverlayTranslationControllerTests.swift in Sources */,
E78486542201EA9400DE64C3 /* OverlayNotchHeightTest.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
6 changes: 5 additions & 1 deletion Source/Classes/Internal/Extensions/UIScrollViiew+Utils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ extension UIScrollView {
}

var isContentOriginInBounds: Bool {
return contentOffset.y <= -oc_adjustedContentInset.top
topOffsetInContent <= 0.0
}

var topOffsetInContent: CGFloat {
contentOffset.y + oc_adjustedContentInset.top
}

func scrollToTop() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class HeightConstraintOverlayTranslationController: OverlayTranslationController
private var deferredTranslation: TranslationMetaData?
private var deferredTranslationCompletionBlocks: [TranslationCompletionBlock] = []

private var translationStartHeight: CGFloat = 0.0
private var translationEndNotchHeight: CGFloat {
return configuration.heightForNotch(at: translationEndNotchIndex)
}
Expand Down Expand Up @@ -103,6 +104,7 @@ class HeightConstraintOverlayTranslationController: OverlayTranslationController
let velocity = deferredTranslation.velocity
let isAnimated = deferredTranslation.isAnimated
translationEndNotchIndex = targetIndex
let targetHeight = configuration.heightForNotch(at: translationEndNotchIndex)
if isAnimated {
let height = translationHeight
let context = ConcreteOverlayContainerContextTransitioning(
Expand All @@ -113,7 +115,7 @@ class HeightConstraintOverlayTranslationController: OverlayTranslationController
overlayTranslationHeight: height,
velocity: velocity,
targetNotchIndex: translationEndNotchIndex,
targetTranslationHeight: translationEndNotchHeight,
targetTranslationHeight: targetHeight,
notchHeightByIndex: configuration.notchHeightByIndex,
reachableIndexes: enabledNotchIndexes()
)
Expand All @@ -134,11 +136,11 @@ class HeightConstraintOverlayTranslationController: OverlayTranslationController
completions.forEach { $0() }
})
delegate?.translationController(self, willTranslateOverlayWith: coordinator)
updateConstraint(toHeight: translationEndNotchHeight)
updateConstraint(toHeight: targetHeight)
animator.startAnimation()
lastScheduledTranslationAnimator = animator
} else {
translateOverlayWithoutAnimation(toHeight: translationEndNotchHeight, isDragging: false)
translateOverlayWithoutAnimation(toHeight: targetHeight, isDragging: false)
completions.forEach { $0() }
delegate?.translationController(self, didMoveOverlayToNotchAt: targetIndex)
}
Expand Down Expand Up @@ -200,13 +202,14 @@ class HeightConstraintOverlayTranslationController: OverlayTranslationController

func startOverlayTranslation() {
isDragging = false
translationStartHeight = translationHeight
}

func dragOverlay(withOffset offset: CGFloat, usesFunction: Bool) {
guard let viewController = overlayViewController else { return }
let maximumHeight = maximumReachableNotchHeight()
let minimumHeight = minimumReachableNotchHeight()
let translation = translationEndNotchHeight - offset
let translation = translationStartHeight - offset
let height: CGFloat
if usesFunction {
let parameters = ConcreteOverlayTranslationParameters(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,10 @@ class PanGestureOverlayTranslationDriver: NSObject,
}
case .changed:
controller.dragOverlay(withOffset: translation.y, usesFunction: true)
case .failed, .ended:
case .failed, .ended, .cancelled:
let velocity = sender.velocity(in: nil)
controller.endOverlayTranslation(withVelocity: velocity)
case .cancelled, .possible:
case .possible:
break
@unknown default:
break
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,11 @@ class ScrollViewOverlayTranslationDriver: OverlayTranslationDriver, OverlayScrol
let previousTranslation = scrollViewTranslation
scrollViewTranslation = scrollView.panGestureRecognizer.translation(in: scrollView).y
if shouldDragOverlay(following: scrollView) {
overlayTranslation += scrollViewTranslation - previousTranslation
if scrollView.isContentOriginInBounds {
overlayTranslation += -scrollView.topOffsetInContent
} else {
overlayTranslation += scrollViewTranslation - previousTranslation
}
let offset = adjustedContentOffset(dragging: scrollView)
lastContentOffsetWhileScrolling = offset
scrollView.contentOffset = offset // Warning : calls `overlayScrollViewDidScroll(_:)` again
Expand Down
Loading

0 comments on commit 947293d

Please sign in to comment.