ManipulationMode解释

8

请问有人可以解释下 manipulation modes 的含义,例如 TranslateX, TranslateRailsX, TranslateInertia 是什么意思?Rail mode是什么?他们所说的惯性又是指什么?


2
我认为该API仅适用于WinRT/XAML而不是WPF,因此我从您的问题中删除了WPF标签,并添加了Windows Runtime标签以提高清晰度。 - Filip Skakun
2个回答

8

使用Rails时,输入处理器检测到操纵大部分是垂直方向还是水平方向,会在报告翻译增量/累积值时坚持相应的轴线。如果不是,则允许自由操纵任何您正在操作的东西。必须与非Rails标志结合使用Rails标志,因此仅使用TranslateRailsX是无效的。您需要同时使用该标志和TranslateX才能使其正常工作。

TranslateInertia标志可允许在其他惯性标志情况下轻松处理快速滑动或惯性旋转/缩放。基本上,例如将该标志添加到TranslateX中并进行快速轻扫手势,即使手势完成后,您仍将继续获取输入事件(ManipulationDelta)。当您一次抛掷输入流后,还会收到ManipulationInertiaStarting事件,因此,如果需要,您可以控制抛掷的距离。您可以查看WinRT XAML Toolkit中我的扩展,以获取有关弹道的更多控制。

您的ManipulationDeltaEventArgs还具有一个IsIntertial属性,可用于检查是否直接获取输入事件或作为抛掷的结果,并在某些情况下调用Complete(),如果您不想继续获取抛掷的增量事件。


如果您需要同时使用TranslateRailsX和TranslateX,那么为什么MSDN文档会说:“不要将Translate值与TranslateRails值组合使用,因为它们被视为互斥的值”?https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.uielement.manipulationmode - user362178

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 

希望这能帮助到处于同样困境的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接