有人可以解释manipulation modes的含义,例如TranslateX
,TranslateRailsX
,TranslateInertia
吗?
什么是rail mode
?他们在说什么惯性?
答案 0 :(得分:8)
使用rails - 当输入处理器检测到操作主要是垂直操作还是大多数水平时,它会在报告转换增量/累积值时粘到相应的轴上。如果不是 - 它只允许自由操纵你操纵的任何东西。 Rails标志必须与非rails标志结合使用,因此只有TranslateRailsX
不起作用。你需要它和TranslateX
才能得到任何结果。
TranslateInertia
标志允许在其他惯性标志的情况下对轻弹或惯性旋转/比例进行简单处理。基本上,如果您将该标志添加到TranslateX
,例如并执行快速轻弹手势 - 即使手势完成,您也会继续获取输入事件(ManipulationDelta
)一段时间。当您在输入流结束后轻弹时,您也会收到ManipulationInertiaStarting
事件,因此您可以根据需要控制轻弹的移动距离。您可以在WinRT XAML Toolkit中查看my extensions该事件的参数,以便更好地控制轻弹弹道。
您的ManipulationDeltaEventArgs
拥有IsIntertial
属性,您还可以使用该属性来检查您获得的事件是直接来自输入事件还是轻弹的结果,如果是的话,还可以调用Complete()
某些原因你不想继续获取电影的增量事件。
答案 1 :(得分:0)
这是一个简单的例子,展示了我如何实现TranslateRailsX / Y.
我希望它只能注册水平滑动,但只需使用TranslateX / Y就可以向上或向右拾取,即使我只是向上或向下滑动。
所以只是一个简单的XAML,而在我的实例中我只想要水平滑动而不是垂直滑动。
xaml文件:
<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
希望这有助于处于同样困境的人。