Как я могу реализовать перетаскивание в Urho 3D-вид? - PullRequest
0 голосов
/ 15 апреля 2019

Я добавил трехмерные объекты просмотра, используя urhosharp для моего проекта xamarin uwp / ios / android.Единственное событие, которое работает, это сенсорное событие, но я также хочу использовать перетаскивание, чтобы объекты могли перемещаться в разные места в 3D-виде.Любые предложения?

https://us.v -cdn.net / 5019960 / загрузки / редактор / ni / u16pg79v2m62.png

1 Ответ

0 голосов
/ 16 апреля 2019

Еще не использовал urhosharp, но вот несколько советов по использованию перетаскивания, не уверен, поможет ли это здесь для вас.

urhosharp : Основные действия

Из документа urhosharp есть некоторые базовые действия, объясняющие, но в них нет перетаскивания. Возможно, вы можете сделать это, комбинируя действия и методы перетаскивания на каждой платформе. Но для этого нужно попробовать.


UWP: ссылка здесь

Вот обзор того, что вам нужно сделать, чтобы включить перетаскивание в вашем приложении:

  1. Включите перетаскивание элемента, установив для его свойства CanDrag значение правда.
  2. Сборка пакета данных. Система обрабатывает изображения и текст автоматически, но для другого контента вам потребуется обработать DragStarted и DragCompleted событий и использовать их для создания ваших собственный пакет данных.
  3. Включите удаление, установив для свойства AllowDrop значение true для всех элементы, которые могут получать отброшенное содержимое.
  4. Обработайте событие DragOver , чтобы система знала, какой тип перетаскивания операции, которые может получить элемент.
  5. Обработайте событие Drop для получения отброшенного контента.

Пример кода:

<Grid AllowDrop="True" DragOver="Grid_DragOver" Drop="Grid_Drop"
      Background="LightBlue" Margin="10,10,10,353">
    <TextBlock>Drop anywhere in the blue area</TextBlock>
</Grid>

private void Grid_DragOver(object sender, DragEventArgs e)
{
    e.AcceptedOperation = DataPackageOperation.Copy;
}

IOS: ссылка здесь

С помощью перетаскивания в iOS пользователи могут перетаскивать элементы из одного местоположения на экране в другое, используя непрерывные жесты. Операция перетаскивания может выполняться в одном приложении или может начинаться в одном приложении и заканчиваться в другом.

  1. Использование элементов перетаскивания для передачи обещаний представления данных между исходным приложением и приложением назначения.
  2. Использование API-интерфейсов перетаскивания для предоставления элементов для перетаскивания.
  3. Использование API-интерфейсов отбрасывания для выборочного использования перетаскиваемого содержимого.
  4. Демонстрирует, как включить перетаскивание для экземпляра UIImageView.

Код примера:

func customEnableDragging(on view: UIView, dragInteractionDelegate: UIDragInteractionDelegate) {
    let dragInteraction = UIDragInteraction(delegate: dragInteractionDelegate)
    view.addInteraction(dragInteraction)
}

func dragInteraction(_ interaction: UIDragInteraction, itemsForBeginning session: UIDragSession) -> [UIDragItem] {
    // Cast to NSString is required for NSItemProviderWriting support.
    let stringItemProvider = NSItemProvider(object: "Hello World" as NSString)
    return [
        UIDragItem(itemProvider: stringItemProvider)
    ]
}

Вот образец для Xamarin IOS.

Или вы можете использовать UIPanGestureRecognizer в IOS для перемещения представления. Вот Пошаговое руководство. Использование Touch в Xamarin.iOS. Все, что вам нужно сделать, это позволить view.center следовать panGesture для изменить.


Android: ссылка здесь

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

В процессе перетаскивания в основном есть четыре шага или состояния:

  1. Запущено: в ответ на жест пользователя, чтобы начать перетаскивание, ваше приложение вызывает startDrag () , чтобы сообщить системе о начале перетаскивания.
  2. Продолжение: пользователь продолжает перетаскивание.
  3. Отброшено: пользователь освобождает тень перетаскивания в ограничивающей рамке представления, которое может принимать данные.
  4. Завершено: после того как пользователь отпустит тень перетаскивания и после того, как система отправит (при необходимости) событие перетаскивания с типом действия ACTION_DROP , система отправит событие перетаскивания с типом действия ACTION_DRAG_ENDED , чтобы указать, что операция перетаскивания завершена.

Таблица. DragEvent типы действий: enter image description here

Или в Android можно использовать onTouchEvent для перемещения вида, необходимо рассчитать положение вида. Пошаговое руководство - Использование Touch в Android

Главное - справиться с нажатием и перемещением двух сообщений, перегружая onTouchEvent . Математические знания (перевод): запишите точку координат, когда ACTION_DOWN , и рассчитайте величину перевода в соответствии с текущей позицией и положением при нажатии на ACTION_MOVE . Обновите элемент управления, заставив его перерисовать, и переместите координаты верхнего левого угла чертежа при перерисовке.


Здесь также обсуждается Drag & Drop в формах Xamarin . Это может быть полезно.

...