Как обрабатывать начало нажатия в SwiftUI - PullRequest
0 голосов
/ 06 октября 2019

У меня есть элементы отображения ScrollView. Я хотел бы определить, когда пользователь начинает нажимать на элемент, чтобы уменьшить его размер, пока он не отпустит палец или не начнет перетаскивать (как в разделе «Сегодня» в AppStore).

Я пытался использовать LongPressGesture.onChanged, но когда использую.gesture (что-то) прокрутка ScrollView больше не работает.

В UIKit я бы использовал событие TouchDown. Есть решение?

Это мой код:

@State touchDownIndex: Int?

var body: some View {

    ScrollView(.horizontal, showsIndicators: false) {
        ScrollView(.horizontal) {
            HStack {
                ForEach(items) {item in
                    ItemView(item: item).scaleEffect(self.items.firstIndex(of: item)! == self.touchDownIndex ? 1 : 0.9)
                }
            }
        }
    }
}

1 Ответ

1 голос
/ 06 октября 2019

Вы должны использовать .onTapGesture, чтобы добавить функциональность нажатия к View в SwiftUI.

HackingWithSwift дает представление о том, как это работает здесь .

Вот краткий пример, который масштабирует текст при нажатии. Это также не мешает прокрутке ScrollView

struct ScalingText: View {
    let text: String
    let isScaled: Bool

    var body: some View {
        Text(text)
            .font(.largeTitle)
            .scaleEffect(isScaled ? 1.0 : 0.9)
            .foregroundColor(isScaled ? .red : .green)
    }
}

struct ContentView: View {
    @State var touchDownIndex: Int?
    let items = ["First", "Second", "Third"]

    var body: some View {
        ScrollView(.horizontal) {
            HStack {
                ForEach(0..<items.count) { index in
                    ScalingText(
                        text: self.items[index],
                        isScaled: self.touchDownIndex == index)
                        // add an onTapGesture to capture the tap to each item in the array
                        .onTapGesture {
                            self.touchDownIndex = index
                    }
                }
            }
        }

    }
}

Gif of scrolling tappable text

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