|
|
@@ -35,8 +35,9 @@ class ACarouselViewModel<Data, ID>: ObservableObject where Data : RandomAccessCo
|
|
|
private let _isWrap: Bool
|
|
|
private let _sidesScaling: CGFloat
|
|
|
private let _autoScroll: ACarouselAutoScroll
|
|
|
+ private let _canMove: Bool
|
|
|
|
|
|
- init(_ data: Data, id: KeyPath<Data.Element, ID>, index: Binding<Int>, spacing: CGFloat, headspace: CGFloat, sidesScaling: CGFloat, isWrap: Bool, autoScroll: ACarouselAutoScroll) {
|
|
|
+ init(_ data: Data, id: KeyPath<Data.Element, ID>, index: Binding<Int>, spacing: CGFloat, headspace: CGFloat, sidesScaling: CGFloat, isWrap: Bool, autoScroll: ACarouselAutoScroll, canMove: Bool) {
|
|
|
|
|
|
guard index.wrappedValue < data.count else {
|
|
|
fatalError("The index should be less than the count of data ")
|
|
|
@@ -49,6 +50,7 @@ class ACarouselViewModel<Data, ID>: ObservableObject where Data : RandomAccessCo
|
|
|
self._isWrap = isWrap
|
|
|
self._sidesScaling = sidesScaling
|
|
|
self._autoScroll = autoScroll
|
|
|
+ self._canMove = canMove
|
|
|
|
|
|
if data.count > 1 && isWrap {
|
|
|
activeIndex = index.wrappedValue + 1
|
|
|
@@ -103,8 +105,8 @@ class ACarouselViewModel<Data, ID>: ObservableObject where Data : RandomAccessCo
|
|
|
|
|
|
extension ACarouselViewModel where ID == Data.Element.ID, Data.Element : Identifiable {
|
|
|
|
|
|
- convenience init(_ data: Data, index: Binding<Int>, spacing: CGFloat, headspace: CGFloat, sidesScaling: CGFloat, isWrap: Bool, autoScroll: ACarouselAutoScroll) {
|
|
|
- self.init(data, id: \.id, index: index, spacing: spacing, headspace: headspace, sidesScaling: sidesScaling, isWrap: isWrap, autoScroll: autoScroll)
|
|
|
+ convenience init(_ data: Data, index: Binding<Int>, spacing: CGFloat, headspace: CGFloat, sidesScaling: CGFloat, isWrap: Bool, autoScroll: ACarouselAutoScroll, canMove: Bool) {
|
|
|
+ self.init(data, id: \.id, index: index, spacing: spacing, headspace: headspace, sidesScaling: sidesScaling, isWrap: isWrap, autoScroll: autoScroll, canMove: canMove)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -236,6 +238,7 @@ extension ACarouselViewModel {
|
|
|
}
|
|
|
|
|
|
private func dragChanged(_ value: DragGesture.Value) {
|
|
|
+ guard _canMove else { return }
|
|
|
|
|
|
isAnimatedOffset = true
|
|
|
|
|
|
@@ -257,6 +260,7 @@ extension ACarouselViewModel {
|
|
|
}
|
|
|
|
|
|
private func dragEnded(_ value: DragGesture.Value) {
|
|
|
+ guard _canMove else { return }
|
|
|
/// reset drag offset
|
|
|
dragOffset = .zero
|
|
|
|