我已经为我的xamarin uwp / ios / android项目使用urhosharp添加了3d视图对象。唯一起作用的事件是触摸事件,但我也想使用拖放功能,以便对象可以移动到3D视图内的不同位置。有什么建议吗?
https://us.v-cdn.net/5019960/uploads/editor/ni/u16pg79v2m62.png
答案 0 :(得分:0)
还没有使用urhosharp,但是这里有一些有关拖放的建议,不确定是否对您有帮助。
urhosharp: Basic Actions
在 urhosharp 的文档中,有一些基本的动作说明,但没有拖放的说明。也许您可以通过在每个平台上组合动作和拖动方法来做到这一点。但这需要您尝试。
UWP: reference link here
以下是在您的应用中启用拖放操作所需的概述:
代码示例:
<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中的拖放操作,用户可以使用连续手势将项目从一个屏幕位置拖动到另一位置。拖放活动可以在单个应用程序中进行,也可以在一个应用程序中开始,然后在另一个应用程序中结束。
示例代码:
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拖放框架,您可以允许用户使用图形化的拖放手势将数据从一个视图移动到另一个视图。该框架包括拖动事件类,拖动侦听器以及帮助程序方法和类。
拖放过程中基本上有四个步骤或状态:
或者在Android中可以使用 onTouchEvent 移动视图,需要计算视图的位置。Walkthrough - Using Touch in Android
最主要的是处理按下和移动两条消息,从而使 onTouchEvent 过载。数学知识(平移): ACTION_DOWN 时记录坐标点,并根据当前位置和在 ACTION_MOVE 处按的位置计算平移量。刷新控件,使控件重新绘制,并在重新绘制时移动图形左上角的坐标。
这里还讨论了Drag & Drop in Xamarin forms。这可能会有所帮助。