请问有人可以解释下 manipulation modes 的含义,例如 TranslateX
, TranslateRailsX
, TranslateInertia
是什么意思?Rail mode
是什么?他们所说的惯性又是指什么?
请问有人可以解释下 manipulation modes 的含义,例如 TranslateX
, TranslateRailsX
, TranslateInertia
是什么意思?Rail mode
是什么?他们所说的惯性又是指什么?
使用Rails时,输入处理器检测到操纵大部分是垂直方向还是水平方向,会在报告翻译增量/累积值时坚持相应的轴线。如果不是,则允许自由操纵任何您正在操作的东西。必须与非Rails标志结合使用Rails标志,因此仅使用TranslateRailsX
是无效的。您需要同时使用该标志和TranslateX
才能使其正常工作。
TranslateInertia
标志可允许在其他惯性标志情况下轻松处理快速滑动或惯性旋转/缩放。基本上,例如将该标志添加到TranslateX
中并进行快速轻扫手势,即使手势完成后,您仍将继续获取输入事件(ManipulationDelta
)。当您一次抛掷输入流后,还会收到ManipulationInertiaStarting
事件,因此,如果需要,您可以控制抛掷的距离。您可以查看WinRT XAML Toolkit中我的扩展,以获取有关弹道的更多控制。
您的ManipulationDeltaEventArgs
还具有一个IsIntertial
属性,可用于检查是否直接获取输入事件或作为抛掷的结果,并在某些情况下调用Complete()
,如果您不想继续获取抛掷的增量事件。
这里有一个简单的示例,展示了我如何实现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