From a88598251d6fd07e8525296bcfe35e228e4198e1 Mon Sep 17 00:00:00 2001 From: outsourcestudio <31660852+outsourcestudio@users.noreply.github.com> Date: Mon, 11 May 2020 23:35:04 +0300 Subject: [PATCH 1/4] Update MenuAnimator.swift --- Sources/MenuAnimator.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MenuAnimator.swift b/Sources/MenuAnimator.swift index 10d086f..31b3dcd 100644 --- a/Sources/MenuAnimator.swift +++ b/Sources/MenuAnimator.swift @@ -316,7 +316,7 @@ private extension MenuInteractiveTransition { guard let transitionContext = transitionContext else { fatalError("Invalid `transitionContext` value. This property should not be nil") } - if progress > 0.4, velocity >= 0 || progress > 0.01, velocity > 100 { + if progress > 0.2 && velocity >= 0 { finishTransition(currentPercentComplete: progress) transitionContext.finishInteractiveTransition() } else { From f5f70a35a6f4e37176e0885e21c2b66146fdf5a4 Mon Sep 17 00:00:00 2001 From: Sergiy <stetris@gmail.com> Date: Thu, 24 Sep 2020 12:15:04 +0300 Subject: [PATCH 2/4] hebrew detection --- Sources/MenuAnimator.swift | 61 ++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/Sources/MenuAnimator.swift b/Sources/MenuAnimator.swift index 31b3dcd..d07533d 100644 --- a/Sources/MenuAnimator.swift +++ b/Sources/MenuAnimator.swift @@ -124,8 +124,10 @@ private extension MenuInteractiveTransition { toViewController.view.transform = CGAffineTransform(scaleX: options.contentScale, y: options.contentScale) addShadow(to: toViewController.view) - - let newOrigin = CGPoint(x: screenWidth - options.visibleContentWidth, y: toViewController.view.frame.origin.y) + + let isLeft = UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? 1 : -1 + + let newOrigin = CGPoint(x: CGFloat(isLeft) * screenWidth + options.visibleContentWidth, y: toViewController.view.frame.origin.y) let rect = CGRect(origin: newOrigin, size: toViewController.view.frame.size) toViewController.view.frame = rect @@ -284,10 +286,16 @@ private extension MenuInteractiveTransition { let dx = translation.x / recognizerView.bounds.width let progress: CGFloat = abs(dx) var velocity = recognizer.velocity(in: recognizerView).x - + if !present { velocity = -velocity } + + let isLeft = UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? true : false + + if (!isLeft) { + velocity = -velocity + } switch recognizer.state { case .began: @@ -303,12 +311,22 @@ private extension MenuInteractiveTransition { } case .changed: - if transitionStarted && (present && dx > 0 || !present && dx < 0) { - guard let transitionContext = transitionContext else { - fatalError("Invalid `transitionContext` value. This property should not be nil") + if (!isLeft) { + if transitionStarted && (present && dx < 0 || !present && dx > 0) { + guard let transitionContext = transitionContext else { + fatalError("Invalid `transitionContext` value. This property should not be nil") + } + updateTransition(percentComplete: progress) + transitionContext.updateInteractiveTransition(progress) + } + } else { + if transitionStarted && (present && dx > 0 || !present && dx < 0) { + guard let transitionContext = transitionContext else { + fatalError("Invalid `transitionContext` value. This property should not be nil") + } + updateTransition(percentComplete: progress) + transitionContext.updateInteractiveTransition(progress) } - updateTransition(percentComplete: progress) - transitionContext.updateInteractiveTransition(progress) } case .cancelled, .ended: @@ -316,12 +334,23 @@ private extension MenuInteractiveTransition { guard let transitionContext = transitionContext else { fatalError("Invalid `transitionContext` value. This property should not be nil") } - if progress > 0.2 && velocity >= 0 { - finishTransition(currentPercentComplete: progress) - transitionContext.finishInteractiveTransition() + + if (!isLeft) { + if progress < 0.2 && velocity <= 0 { + cancelTransition(currentPercentComplete: progress) + transitionContext.cancelInteractiveTransition() + } else { + finishTransition(currentPercentComplete: progress) + transitionContext.finishInteractiveTransition() + } } else { - cancelTransition(currentPercentComplete: progress) - transitionContext.cancelInteractiveTransition() + if progress > 0.2 && velocity >= 0 { + finishTransition(currentPercentComplete: progress) + transitionContext.finishInteractiveTransition() + } else { + cancelTransition(currentPercentComplete: progress) + transitionContext.cancelInteractiveTransition() + } } } else if transitionShouldStarted, !transitionStarted { @@ -358,6 +387,8 @@ private extension MenuInteractiveTransition { guard let contentSnapshotView = self.contentSnapshotView else { fatalError("Invalid `contentSnapshotView` value. This property should not be nil") } + + let isLeft = UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? 1 : -1 if present { let newScale = 1 - (1 - options.contentScale) * percentComplete @@ -365,7 +396,7 @@ private extension MenuInteractiveTransition { contentSnapshotView.transform = CGAffineTransform(scaleX: newScale, y: newScale) - let newOrigin = CGPoint(x: newX, y: contentSnapshotView.frame.origin.y) + let newOrigin = CGPoint(x: CGFloat(isLeft) * newX, y: contentSnapshotView.frame.origin.y) let rect = CGRect(origin: newOrigin, size: contentSnapshotView.frame.size) contentSnapshotView.frame = rect @@ -380,7 +411,7 @@ private extension MenuInteractiveTransition { let newScale = options.contentScale + (1 - options.contentScale) * percentComplete toViewController.view.transform = CGAffineTransform(scaleX: newScale, y: newScale) - let newOrigin = CGPoint(x: newX, y: toViewController.view.frame.origin.y) + let newOrigin = CGPoint(x: CGFloat(isLeft) * newX, y: toViewController.view.frame.origin.y) let rect = CGRect(origin: newOrigin, size: toViewController.view.frame.size) toViewController.view.frame = rect From 385d5b3453a161457ec817c30dc1f4e24ce7218a Mon Sep 17 00:00:00 2001 From: Sergiy <stetris@gmail.com> Date: Sun, 27 Sep 2020 13:06:49 +0300 Subject: [PATCH 3/4] fix with shadow --- Sources/MenuAnimator.swift | 7 ++++++- Sources/SideMenuItemOptions.swift | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Sources/MenuAnimator.swift b/Sources/MenuAnimator.swift index d07533d..ca1d2bd 100644 --- a/Sources/MenuAnimator.swift +++ b/Sources/MenuAnimator.swift @@ -216,7 +216,12 @@ private extension MenuInteractiveTransition { func addShadow(to view: UIView) { view.layer.shadowColor = currentItemOptions.shadow.color?.cgColor view.layer.shadowOpacity = Float(currentItemOptions.shadow.opacity) - view.layer.shadowOffset = currentItemOptions.shadow.offset + let isLeft = UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? true : false + if (isLeft) { + view.layer.shadowOffset = currentItemOptions.shadow.offset + } else { + view.layer.shadowOffset = currentItemOptions.shadow.offset_reverse + } view.layer.shadowRadius = currentItemOptions.shadow.radius view.layer.shadowPath = UIBezierPath(roundedRect: view.bounds, cornerRadius: currentItemOptions.cornerRadius).cgPath view.layer.shouldRasterize = true diff --git a/Sources/SideMenuItemOptions.swift b/Sources/SideMenuItemOptions.swift index 94a5b0e..9a3bf91 100644 --- a/Sources/SideMenuItemOptions.swift +++ b/Sources/SideMenuItemOptions.swift @@ -17,6 +17,7 @@ public struct SideMenuItemOptions { public var color: UIColor? = UIColor.black public var opacity: CGFloat = 0.3 public var offset: CGSize = CGSize(width: -5, height: 5) + public var offset_reverse: CGSize = CGSize(width: -5, height: 5) public var radius: CGFloat = 3 public init() { } From f9bc4c535429b56c7175dbb92fec4ef5eaec448e Mon Sep 17 00:00:00 2001 From: Sergiy <stetris@gmail.com> Date: Sun, 27 Sep 2020 13:11:40 +0300 Subject: [PATCH 4/4] fix with shadow --- Sources/SideMenuItemOptions.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/SideMenuItemOptions.swift b/Sources/SideMenuItemOptions.swift index 9a3bf91..0916d50 100644 --- a/Sources/SideMenuItemOptions.swift +++ b/Sources/SideMenuItemOptions.swift @@ -17,7 +17,7 @@ public struct SideMenuItemOptions { public var color: UIColor? = UIColor.black public var opacity: CGFloat = 0.3 public var offset: CGSize = CGSize(width: -5, height: 5) - public var offset_reverse: CGSize = CGSize(width: -5, height: 5) + public var offset_reverse: CGSize = CGSize(width: 5, height: 5) public var radius: CGFloat = 3 public init() { }