Рамка onLongPressGesture в SwiftUI - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь воспроизвести эффект длительного нажатия кнопки, как эффект по умолчанию для Apple, но с использованием собственного стиля.

У меня есть пользовательское представление, в котором я вызываю onLongPressGesture. Проблема в том, что переменная pressing установлена ​​в значение false, даже если мой палец все еще нажимает.

Я просто перемещаю палец за пределы рамы представлений на LongPressGesture.

Я хочу, чтобы переменная pressing не была установлена ​​в false, когда я перемещаю палец за пределы области кадра.

Как мне этого добиться?

Вот мой код:


.onLongPressGesture(minimumDuration: 1000000000, maximumDistance: 100, pressing: {
    pressing in
    if !pressing {
        self.action?()
        self.showNextScreen = true
    } else {
        withAnimation(.spring()) {
            self.showGrayBackgound = true
        }
    }
}) { }

1 Ответ

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

Используйте параметр maximumDistance, чтобы установить, насколько далеко за пределами представления применяется жест:

struct LongPressView: View {
    @State var isPressing = false
    let action: ()->()

    var body: some View {
        Rectangle()
            .fill(isPressing ? Color.orange : .gray)
            .frame(width: 50, height: 30)
            .onLongPressGesture(minimumDuration: 1000000, maximumDistance: 1000, pressing: { pressing in
                self.isPressing = pressing
                if !pressing { self.action() }
            }, perform: {})
    }
}

Достаточно большое значение maximumDistance будет находиться за границей экрана, и длительное нажатие будет оставаться активнымпока не выйдет. Однако поведение macOS, когда вы щелкаете мышью и удерживаете ее, перетаскивая за пределы рамки и назад, так что состояние кнопки выключается и снова включается, невозможно с LongPressGesture. После выхода за maximumDistance жест завершен.

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