Spec-Zone.ru › Kotlin 2

Обработка событий касания с помощью interop на iOS

На iOS Compose Multiplatform может интегрироваться с нативными фреймворками UIKit и SwiftUI. Одна из сложностей такой интеграции — обработка касаний: когда приложение Compose Multiplatform включает нативные элементы интерфейса, реакция приложения на касания в области interop может различаться в зависимости от контекста.

В настоящее время в Compose Multiplatform есть только одна стратегия обработки событий касания в нативном представлении: все касания полностью обрабатываются нативным интерфейсом, а Compose даже не узнаёт об их возникновении.

Касания в прокручиваемой области interop

Если каждое касание в области interop сразу передаётся базовому нативному элементу интерфейса, составной элемент-контейнер не может отреагировать на то же касание. Самая очевидная проблема возникает при прокрутке. Если область interop находится в прокручиваемом контейнере, пользователь может ожидать, что эта область:

  • Реагирует на касание, когда пользователь хочет с ней взаимодействовать.

  • Не реагирует на касание, когда пользователь хочет прокрутить родительский контейнер.

Для решения этой проблемы в Compose Multiplatform реализовано поведение, вдохновлённое UIScrollView. При первом обнаружении касания возникает небольшая задержка (150 мс), которая позволяет приложению решить, следует ли сообщить о нём контейнеру:

  • Если компоненты Compose потребляют какие-либо события касания в течение этой задержки, Compose Multiplatform не сообщает нативному элементу интерфейса об этой последовательности касаний.

  • Если за время задержки события не потребляются, Compose Multiplatform передаёт управление нативному интерфейсу до конца последовательности касаний.

Таким образом, при прокручиваемом содержимом, если пользователь удерживает касание, интерфейс воспринимает это как намерение взаимодействовать с нативным элементом; если последовательность касаний короткая, пользователь, скорее всего, хочет взаимодействовать с родительским элементом.

Если ваше представление interop не предназначено для взаимодействия, можно заранее отключить обработку всех касаний. Для этого вызовите конструктор UIKitView или UIKitViewController, задав для параметра isInteractive значение false.

Для более сложных сценариев обработки жестов внутри представлений interop используйте класс UIGestureRecognizer или его различные подклассы. Он позволяет обнаруживать нужные жесты в нативном представлении interop, а также отменять последовательности касаний в Compose.

Выбор стратегии обработки касаний

В Compose Multiplatform 1.12.0 также можно опробовать экспериментальный API для более точного управления интерфейсом interop.

Новые конструкторы для UIKitView или UIKitViewController принимают в качестве аргумента объект UIKitInteropProperties. С его помощью можно задать:

  • Параметр interactionMode для заданного представления interop, позволяющий выбрать стратегию обработки касаний.

  • Параметр isNativeAccessibilityEnabled, изменяющий поведение специальных возможностей для представления interop.

Для параметра interactionMode можно задать значение Cooperative или NonCooperative:

  • Режим Cooperative — это новое значение по умолчанию, описанное выше: Compose Multiplatform добавляет задержку при обработке касаний. Экспериментальный API позволяет настроить эту задержку, выбрав другое значение вместо значения по умолчанию — 150 мс.

  • В режиме NonCooperative используется предыдущая стратегия: Compose Multiplatform не обрабатывает события касания в представлении interop. Несмотря на перечисленные выше общие недостатки, этот режим может быть полезен, если вы уверены, что касания в interop никогда не нужно обрабатывать на уровне Compose.

  • Чтобы отключить любое взаимодействие с нативным интерфейсом, передайте interactionMode = null конструктору.

Что дальше?

Подробнее об интеграции UIKit и SwiftUI в Compose Multiplatform.

15 октября 2025 г.
Liquid Glass в приложении Compose MultiplatformПоддержка специальных возможностей iOS

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/compose-ios-touch.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API