Ааааааааааааааааааааааааааааааааа, такая простая задача. Ну, по крайней мере, до тех пор, пока они не заставят меня работать должным образом.

Итак… я вижу, вы хотите написать яркую многозадачную кнопку, которая выполняет бесконечное количество действий в зависимости от того, как вы к ней прикасаетесь, но при этом БЕЗжертв. основные функциональные возможности кнопок (например, выделение, затухание и все те приятные вещи, которые кнопки делают без вашего запроса). Что-то мне подсказывает, что вы хотите, чтобы он выполнял разные действия независимо от того, касаетесь вы его или нажимаете, может быть, вы также хотите действие для двойного нажатия, я прав?

Что ж, не волнуйся, дитя мое, твоя любимая Королева Свифт снова здесь, чтобы спасти тебя.

Вам нужно сделать следующее:

Button {
            //This stays empty no matter what.
        } label: {
            Text("You love me")
        }
        //This is outside the label
        .simultaneousGesture(LongPressGesture().onChanged { _ in
            print("Taaap started")
        })
        .simultaneousGesture(LongPressGesture().onEnded { _ in
            print("Taaap ended")
        })
        .simultaneousGesture(TapGesture(count: 2).onEnded {
            print("Tap tap")
        })
        .simultaneousGesture(TapGesture().onEnded {
            print("Tap")
        })

ПРИМЕЧАНИЕ:

По какой-то причине он ничего не печатал в моей консоли. Если это относится и к вам, просто заставьте его выполнять некоторые менее скучные действия, они будут работать. 100% гарантия.

Но в чем секрет того, как это работает?

Эз, упорядочи жесты по их сложности, начиная с самых сложных и переходя к более простым. Так, например, если вам нужны LongPressGesture и TapGesture, вам нужно поставить первое перед вторым. Если ваше сердце хочет добавить в уравнение двойное касание, его нужно будет разместить перед одиночным жестом TapGesture и после жеста LongPressGesture, как я показал вам в своем примере.

Причина, по которой мы выбираем эту последовательность, заключается в том, что основные жесты, такие как одиночное касание, при размещении перед более сложными заставляют систему игнорировать последние. Например, если вы поместите жест двойного касания после жеста одиночного касания, первый будет…