有人可以解释操作模式的含义,例如TranslateX
, TranslateRailsX
,TranslateInertia
吗?什么是rail mode
? 他们在谈论什么惯性?
2 回答
使用导轨 - 当输入处理器检测到操作是主要是垂直的还是主要是水平的时,它会在报告平移增量/累积值时粘在相应的轴上。如果不是 - 它只允许自由地操纵你正在操纵的任何东西。Rails 标志必须与非 Rails 标志结合使用,因此TranslateRailsX
不起作用。你需要这两者并TranslateX
让一切顺利进行。
在其他惯性标志的情况下,该TranslateInertia
标志允许对轻弹或惯性旋转/缩放进行简单处理。基本上TranslateX
,例如,如果您将该标志添加到该标志并进行快速轻弹手势 - 即使在手势完成后,您仍将继续获得输入事件 ( ManipulationDelta
) 一段时间。一旦输入流结束,您也可以在轻弹时获得该ManipulationInertiaStarting
事件,因此您可以控制轻弹的距离。您可以查看我在 WinRT XAML 工具包中对该事件的参数的扩展,以更好地控制电影的弹道。
您ManipulationDeltaEventArgs
有一个IsIntertial
属性,您还可以使用它来检查您获得的事件是直接来自输入事件还是轻弹的结果,并且Complete()
如果由于某种原因您不想继续获取轻弹的增量事件,也可以调用。
这是一个简单的例子,展示了我是如何实现 TranslateRailsX/Y 的。
我希望它只记录水平滑动,但仅使用 TranslateX/Y 它就会向左或向右拾取,即使我只是向上或向下滑动。
所以只是一个简单的 XAML,在我的例子中,我只想要水平滑动而不是垂直滑动。
xml文件:
<Grid Background="WhiteSmoke">
<WebView Name="webview" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Grid>
xaml.cs 文件:
int x1;
int x2;
int y1;
int y2;
public MainPage()
{
this.InitializeComponent();
webview.ManipulationMode = ManipulationModes.TranslateRailsX | ManipulationModes.TranslateRailsY;
webview.ManipulationStarted += (s, e) => x1 = (int)e.Position.X;
webview.ManipulationStarted += (s, e) => y1 = (int)e.Position.Y;
webview.ManipulationCompleted += (s, e) =>
{
x2 = (int)e.Position.X;
y2 = (int)e.Position.Y;
System.Diagnostics.Debug.WriteLine(x1);
System.Diagnostics.Debug.WriteLine(x2);
System.Diagnostics.Debug.WriteLine(y1);
System.Diagnostics.Debug.WriteLine(y2);
if (x1 > x2)
{
System.Diagnostics.Debug.WriteLine("right");
};
if (x1 < x2 )
{
System.Diagnostics.Debug.WriteLine("left");
}
};
现在我在垂直滑动时得到以下信息
x1 180
x2 180
y1 201
y2 386
和水平滑动
x1 89
x2 293
y1 371
y2 371
left or right
希望这可以帮助处于同样困境的人。