diff --git a/Demo/Demo/App/MainView.swift b/Demo/Demo/App/MainView.swift index 3b6a8c8..b19b037 100644 --- a/Demo/Demo/App/MainView.swift +++ b/Demo/Demo/App/MainView.swift @@ -21,13 +21,11 @@ struct MainView: View { }) { Label("CarouselStack", systemImage: "sparkles.rectangle.stack.fill") } - #if os(iOS) Button(action: { route = .shuffleDeck }) { Label("ShuffleDeck", systemImage: "photo.on.rectangle.angled") } - #endif } header: { Text("ShuffleStack") } diff --git a/Sources/CarouselStack/View/CarouselStack+Sliding.swift b/Sources/CarouselStack/View/CarouselStack+Sliding.swift index 0268203..af72b0b 100644 --- a/Sources/CarouselStack/View/CarouselStack+Sliding.swift +++ b/Sources/CarouselStack/View/CarouselStack+Sliding.swift @@ -6,15 +6,15 @@ extension CarouselStack { self.autoSliding = true self.direction = direction performMovingToMiddle() - DispatchQueue.main.asyncAfter(deadline: .now() + duration(0.12)) { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.21) { self.performRestoring() } } /// A method that mimics sliding behaviour to slide view to left or right for the purpose of programmatic sliding. internal func performMovingToMiddle() { - let maXSwipeDistance = size.width * 0.6 - withAnimation(animation.timing(duration: duration(0.12))) { + let maXSwipeDistance = size.width * 0.75 + withAnimation(animation.timing(duration: 0.21)) { switch direction { case .left: xPosition = maXSwipeDistance @@ -44,15 +44,13 @@ extension CarouselStack { ) index = newIndex direction = .right - notifyListener(context: context) - DispatchQueue.main.asyncAfter(deadline: .now() + (autoSliding ? 0 : 0.005)) { - withAnimation(animation.timing(duration: duration(0.12))) { - xPosition = 0 - autoSliding = false - } + withAnimation(animation.timing(duration: duration(0.07))) { + xPosition = 0 + autoSliding = false } + notifyListener(context: context) } else { - withAnimation(animation.timing(duration: duration(0.1))) { + withAnimation(animation.timing(duration: duration(0.05))) { xPosition = 0 } } @@ -73,15 +71,13 @@ extension CarouselStack { ) index = newIndex direction = .left - notifyListener(context: context) - DispatchQueue.main.asyncAfter(deadline: .now() + (autoSliding ? 0 : 0.005)) { - withAnimation(animation.timing(duration: duration(0.12))) { - xPosition = 0 - autoSliding = false - } + withAnimation(animation.timing(duration: duration(0.07))) { + xPosition = 0 + autoSliding = false } + notifyListener(context: context) } else { - withAnimation(animation.timing(duration: duration(0.1))) { + withAnimation(animation.timing(duration: duration(0.05))) { xPosition = 0 } } diff --git a/Sources/CarouselStack/View/CarouselStack.swift b/Sources/CarouselStack/View/CarouselStack.swift index 8ca7ad8..dab4e4c 100644 --- a/Sources/CarouselStack/View/CarouselStack.swift +++ b/Sources/CarouselStack/View/CarouselStack.swift @@ -133,7 +133,7 @@ public struct CarouselStack: View { .disabled(autoSliding) .onChange(of: isActiveGesture) { value in if !isActiveGesture { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.02) { performRestoring() } } diff --git a/Tests/ShuffleItTests/CarouselStack/CarouselStackShufflingTests.swift b/Tests/ShuffleItTests/CarouselStack/CarouselStackShufflingTests.swift index 2253f87..6f13279 100644 --- a/Tests/ShuffleItTests/CarouselStack/CarouselStackShufflingTests.swift +++ b/Tests/ShuffleItTests/CarouselStack/CarouselStackShufflingTests.swift @@ -24,7 +24,7 @@ final class CarouselStackShufflingTests: BaseTestCase { let exp2 = view.inspection.inspect(after: 0.4) { view in let sut = try view.actualView() let width = 300 - sut.padding * 2 - let maxSlideDistance = sut.size.width * 0.6 + let maxSlideDistance = sut.size.width * 0.75 XCTAssertEqual(sut.index, 6) XCTAssertEqual(sut.xPosition, maxSlideDistance) XCTAssertEqual(sut.direction, .left) @@ -73,7 +73,7 @@ final class CarouselStackShufflingTests: BaseTestCase { let exp2 = view.inspection.inspect(after: 0.4) { view in let sut = try view.actualView() let width = 300 - sut.padding * 2 - let maxSlideDistance = sut.size.width * 0.6 + let maxSlideDistance = sut.size.width * 0.75 XCTAssertEqual(sut.index, 0) XCTAssertEqual(sut.xPosition, -maxSlideDistance) XCTAssertEqual(sut.direction, .right) @@ -121,7 +121,7 @@ final class CarouselStackShufflingTests: BaseTestCase { let exp2 = view.inspection.inspect(after: 0.4) { view in let sut = try view.actualView() let width = 300 - sut.padding * 2 - let maxSlideDistance = sut.size.width * 0.6 + let maxSlideDistance = sut.size.width * 0.75 XCTAssertEqual(sut.index, 6) XCTAssertEqual(sut.xPosition, maxSlideDistance) XCTAssertEqual(sut.direction, .left) @@ -168,7 +168,7 @@ final class CarouselStackShufflingTests: BaseTestCase { let exp2 = view.inspection.inspect(after: 0.4) { view in let sut = try view.actualView() let width = 300 - sut.padding * 2 - let maxSlideDistance = sut.size.width * 0.6 + let maxSlideDistance = sut.size.width * 0.75 XCTAssertEqual(sut.index, 0) XCTAssertEqual(sut.xPosition, -maxSlideDistance) XCTAssertEqual(sut.direction, .right)