Ответ
highPriorityGesture имеет приоритет над simultaneousGesture, так как они решают разные задачи:
.highPriorityGesture– переопределяет стандартные жесты view. Жест выполняется вместо жестов, которые view обрабатывает по умолчанию (например, тап поверхButtonилиScrollView)..simultaneousGesture– позволяет жесту работать параллельно с другими жестами, включая стандартные (например, масштабирование и прокрутка вScrollView).
Ключевое правило: Если оба модификатора применены к одному view, сначала будет обработан highPriorityGesture, потенциально блокируя simultaneousGesture.
Пример, демонстрирующий приоритет:
Text("Нажми на меня")
.highPriorityGesture(
TapGesture().onEnded { print("Сработал highPriorityGesture") }
)
.simultaneousGesture(
TapGesture().onEnded { print("Сработал simultaneousGesture") }
)
// В консоли будет только: "Сработал highPriorityGesture" Ответ 18+ 🔞
А, ну ты смотри, какие тонкости всплывают, блядь! Слушай, сейчас разберём этот цирк с жестами, чтобы у тебя в голове всё встало на свои ебучки-воробушки.
Вот смотри, у нас тут два модификатора, как два упрямых козла на мосту: highPriorityGesture и simultaneousGesture. И они, сука, решают принципиально разные задачи, понимаешь?
-
.highPriorityGesture– это такой наглый мудак, который всех отодвигает локтями и кричит: «Я тут главный, блядь!». Он полностью перебивает все стандартные жесты, которые вьюха умеет делать сама по себе. Например, ты наButtonнажмёшь – а он вместо клика по кнопке выполнит твой кастомный жест. Или вScrollViewначнёшь скроллить – а он тебя послушает и сделает что-то своё, а прокрутка нахуй не сработает. Он работает ВМЕСТО дефолтных жестов. -
.simultaneousGesture– это уже более адекватный товарищ, дипломат, блядь. Он говорит: «Давайте, ребята, жить дружно, можно и так, и эдак». Он позволяет твоему жесту работать ПАРАЛЛЕЛЬНО, одновременно с другими жестами, в том числе и со стандартными. Хочешь вScrollViewи скроллить, и своим жестом масштабировать? Вот для этого он и нужен, ёпта.
А теперь главное, на чём все обжигаются, как хуй на сковородке: если ты, такой умный, навесишь оба этих модификатора на одну и ту же вьюху, то что получится?
Правило простое, как три рубля: сначала всегда отработает highPriorityGesture. Он же приоритетный, нахуй! Он такой важный, что может запросто заблокировать и заткнуть рот simultaneousGesture. Тот просто не успеет пикнуть, его уже перехватят.
Вот, глянь на этот пример, тут всё как на ладони, блядь:
Text("Нажми на меня")
.highPriorityGesture(
TapGesture().onEnded { print("Сработал highPriorityGesture") }
)
.simultaneousGesture(
TapGesture().onEnded { print("Сработал simultaneousGesture") }
)
// В консоли будет только: "Сработал highPriorityGesture"
Видишь? Ты тыкаешь в текст, а в консоли только одна надпись от высокоприоритетного жеста. Второй, одновременный, нихуя не сказал, его просто проигнорировали. Вот такая, блядь, суровая иерархия в этом царстве SwiftUI. Запомни это, чтобы потом не ебаться с непонятными багами, когда жесты не работают, как ожидалось.