如何在urho 3d视图中实现拖放?

时间:2019-04-15 07:30:08

标签: xamarin.forms xamarin.uwp urhosharp urho3d

我已经为我的xamarin uwp / ios / android项目使用urhosharp添加了3d视图对象。唯一起作用的事件是触摸事件,但我也想使用拖放功能,以便对象可以移动到3D视图内的不同位置。有什么建议吗?

https://us.v-cdn.net/5019960/uploads/editor/ni/u16pg79v2m62.png

1 个答案:

答案 0 :(得分:0)

还没有使用urhosharp,但是这里有一些有关拖放的建议,不确定是否对您有帮助。

urhosharp: Basic Actions

urhosharp 的文档中,有一些基本的动作说明,但没有拖放的说明。也许您可以通过在每个平台上组合动作和拖动方法来做到这一点。但这需要您尝试。


UWP: reference link here

以下是在您的应用中启用拖放操作所需的概述:

  1. 通过将其 CanDrag 属性设置为来启用元素上的拖动 是的。
  2. 构建数据包。系统处理图像和文字 自动,但对于其他内容,您需要处理 DragStarted DragCompleted 事件,并使用它们来构造您的 自己的数据包。
  3. 通过在所有页面上将 AllowDrop 属性设置为true来
  4. 启用删除 可以接收已删除内容的元素。
  5. 处理 DragOver 事件以使系统知道拖动的类型 元素可以接收的操作。
  6. 处理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: reference link here

通过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的​​sample

或者您可以在IOS中使用 UIPanGestureRecognizer 移动视图。这里是Walkthrough: Using Touch in Xamarin.iOS.,您要做的就是让view.center跟随panGesture进行更改。


Android: reference link here

借助Android拖放框架,您可以允许用户使用图形化的拖放手势将数据从一个视图移动到另一个视图。该框架包括拖动事件类,拖动侦听器以及帮助程序方法和类。

拖放过程中基本上有四个步骤或状态:

  1. 已开始:响应用户开始拖动的手势,您的应用程序调用 startDrag()告诉系统开始拖动。
  2. 继续:用户继续拖动。
  3. Dropped:用户在可以接受数据的View的边界框内释放拖动阴影。
  4. 已结束:用户释放拖动阴影,并在系统发出(如有必要)动作类型为 ACTION_DROP 的拖动事件后,系统会发出动作类型为的拖动事件> ACTION_DRAG_ENDED 表示拖动操作已结束。

表。 DragEvent操作类型: enter image description here

或者在Android中可以使用 onTouchEvent 移动视图,需要计算视图的位置。Walkthrough - Using Touch in Android

最主要的是处理按下和移动两条消息,从而使 onTouchEvent 过载。数学知识(平移): ACTION_DOWN 时记录坐标点,并根据当前位置和在 ACTION_MOVE 处按的位置计算平移量。刷新控件,使控件重新绘制,并在重新绘制时移动图形左上角的坐标。


这里还讨论了Drag & Drop in Xamarin forms。这可能会有所帮助。