Жест панорамирования SwiftUI

#ios #swift #swiftui #hstack

#iOS #быстрый #swiftui #hstack #swift

Вопрос:

Я новичок в SwiftUI. Я показываю серию элементов в HStack . Им не нужно перемещаться, но я хотел бы выделить их, когда пользователь проводит по ним пальцем, и изменить отдельный вид в другом месте, чтобы предоставить больше информации о выделенном элементе, без необходимости пользователю поднимать палец. Пользователи должны иметь возможность перемещаться взад и вперед и видеть элемент, выделенный их пальцем, а также обновление содержимого отдельного представления.

В UIKit я бы создал UIPanGestureRecognizer , и по мере распознавания жеста получал правильный вид для местоположения распознавателя, выделял вид, не выделял все другие виды и обновлял подробный вид.

Однако я не могу понять, как это сделать в SwiftUI. Я не хочу ничего перетаскивать, я просто хочу получить, какой вид находится под пальцем пользователя, когда он перемещает его.

Комментарии:

1. Используйте модификатор DragGesture with .gesture в своих представлениях.

2. @Asperi Используя это, как я могу узнать, к какому виду в стеке пользователь в данный момент прикасается?

Ответ №1:

Я думаю, что что-то подобное может вам помочь:

 struct ContentView: View {
    var body: some View {
        VStack {
            Text("Hello, World!")
            Text("Hello, World!")
        }
        .gesture(
            DragGesture()
                .onChanged({ value in print(value) })
                .onEnded({ _ in print("End")})
        )
    }
}
  

Комментарии:

1. Как я могу узнать, к какому виду в стеке пользователь прикасается изнутри onChanged блока?

2. @CompC Я не совсем понимаю вашу цель. В области SwiftUI вы должны сосредоточиться на конкретном представлении, как и в области UIKit. Вы должны сосредоточиться на состоянии и его привязке к ‘Представлению’ SwiftUI.

3. Я использую SwiftUI и UIKit в одном приложении. У меня есть элемент управления, встроенный в SwiftUI, и когда пользователь перетаскивает представления в HStack, UIViewController, который содержит представление SwiftUI, должен получить обратный вызов с индексом представления в HStack, к которому прикасается пользователь.