Как отключить проверку попадания для представлений, которые находятся за рамкой из-за смещения в SwiftUI? - PullRequest
0 голосов
/ 27 марта 2020

Я использую Постраничный стек, который прокручивается по горизонтали и привязывается к выбранному индексу. Функциональность работает нормально, если у меня нет ее рядом с другим видом Когда я прокручиваю, смещение блокирует вид.

Я опустил .clipped (), чтобы его можно было визуализировать. Если я добавлю его, он выглядит визуально хорошо, но он по-прежнему взаимодействует, блокируя жесты, предназначенные для представления под ним.

struct PagedStack<Content: View>: View {
let pageCount: Int
let spacing: CGFloat
@Binding var currentIndex: Int
let content: Content

@GestureState private var translation: CGFloat = 0

init(pageCount: Int, spacing: CGFloat, currentIndex: Binding<Int>, @ViewBuilder content: () -> Content) {
    self.pageCount = pageCount
    self.spacing = spacing
    self._currentIndex = currentIndex
    self.content = content()
}

var body: some View {
    GeometryReader { geometry in
        HStack(spacing: self.spacing) {
            self.content.frame(width: geometry.size.width)
        }
        .frame(width: geometry.size.width, alignment: .leading)
        .offset(x: -CGFloat(self.currentIndex) * (geometry.size.width + self.spacing))
        .offset(x: self.translation)
        .animation(.interactiveSpring())
        .gesture(
            DragGesture().updating(self.$translation) { value, state, _ in
                state = value.translation.width
            }.onEnded { value in
                let offset = value.translation.width / geometry.size.width
                let newIndex = (CGFloat(self.currentIndex) - offset).rounded()
                self.currentIndex = min(max(Int(newIndex), 0), self.pageCount - 1)
            }
        )
    }
}

}

Вот изображение: enter image description here

1 Ответ

0 голосов
/ 27 марта 2020

Я исправил это. Я добавил .contentShape (Rectangle ()), чтобы ограничить область проверки попадания рамкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...