Ааааааааааааааааааааааааааааааааа, такая простая задача. Ну, по крайней мере, до тех пор, пока они не заставят меня работать должным образом.
Итак… я вижу, вы хотите написать яркую многозадачную кнопку, которая выполняет бесконечное количество действий в зависимости от того, как вы к ней прикасаетесь, но при этом БЕЗжертв. основные функциональные возможности кнопок (например, выделение, затухание и все те приятные вещи, которые кнопки делают без вашего запроса). Что-то мне подсказывает, что вы хотите, чтобы он выполнял разные действия независимо от того, касаетесь вы его или нажимаете, может быть, вы также хотите действие для двойного нажатия, я прав?
Что ж, не волнуйся, дитя мое, твоя любимая Королева Свифт снова здесь, чтобы спасти тебя.
Вам нужно сделать следующее:
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, как я показал вам в своем примере.
Причина, по которой мы выбираем эту последовательность, заключается в том, что основные жесты, такие как одиночное касание, при размещении перед более сложными заставляют систему игнорировать последние. Например, если вы поместите жест двойного касания после жеста одиночного касания, первый будет…