2014-04-18 18 views
7

Kann jemand die Bedeutung von manipulation modes wie TranslateX, TranslateRailsX, TranslateInertia erklären? Was ist ein rail mode? Und von welcher Trägheit sprechen sie?Manipulationsmodus erklärt

+1

Ich denke, dass API nur in WinRT/XAML ist und nicht WPF, also entfernte ich das WPF-Tag aus Ihrer Frage und fügte der Windows-Laufzeit eins für Klarheit hinzu. –

Antwort

8

Mit Schienen - wenn der Eingangsprozessor erkennt, ob die Manipulation hauptsächlich vertikal oder überwiegend horizontal erfolgt, bleibt er bei der Meldung von Übersetzungsdelta/kumulativen Werten an der jeweiligen Achse hängen. Wenn nicht - es erlaubt nur frei zu manipulieren, was auch immer Sie manipulieren. Rails-Flags müssen in Kombination mit den Nicht-Rails-Flags verwendet werden, so dass nur TranslateRailsX nicht funktioniert. Sie brauchen beides und TranslateX, um alles in Gang zu bringen.

Der Merker TranslateInertia ermöglicht eine einfache Handhabung für Flicks oder Trägheitsdrehungen/Waagen im Falle der anderen Trägheitsflags. Grundsätzlich, wenn Sie das Flag zum TranslateX zum Beispiel hinzufügen und Sie eine schnelle Flickgeste tun - erhalten Sie die Eingabeereignisse (ManipulationDelta) für eine Weile, auch nachdem die Geste abgeschlossen ist. Sie erhalten auch das ManipulationInertiaStarting Ereignis, wenn Sie einmal streichen, sobald der Eingabestream endet, damit Sie steuern können, wie weit der Wechsel geht, wenn Sie möchten. Sie können my extensions zu dem Argument dieses Ereignisses in WinRT XAML Toolkit auschecken, um mehr Kontrolle über die Ballistik des Films auch zu erhalten.

Ihre ManipulationDeltaEventArgs haben eine IsIntertial Eigenschaft, die Sie auch zu prüfen, verwenden können, wenn die Ereignisse, Sie werden immer direkt von Eingabeereignissen oder Folge eines leichten Schlag sind und auch Complete() nennen, wenn Sie aus irgendeinem Grund das nicht fortsetzen wollen immer Delta-Ereignisse für den Film.

+0

Wenn Sie beide TranslateRailsX und TranslateX brauchen, dann kommen wie die Msdn doc sagt: „Sie verbinden nicht * Werte mit TranslateRails * Werte übersetzen, werden diese als sich gegenseitig ausschließende Werte behandelt“? https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.uielement.manipulationsmodus – user362178

0

Hier ist ein einfaches Beispiel, das zeigt, wie ich TranslateRailsX/Y implementiert habe.

Ich wollte es nur horizontale Swipe registrieren, aber mit nur TranslateX/Y nahm es die linke oder rechte auf, auch wenn ich nur nach oben oder unten wischte.

Also nur ein einfaches XAML und wie in meiner Instanz möchte ich nur horizontale Swipes nicht die vertikalen Swipes.

XAML-Datei:

<Grid Background="WhiteSmoke"> 
    <WebView Name="webview" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
</Grid> 

xaml.cs Datei:

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"); 

      } 

     }; 

Und jetzt habe ich folgendes auf einer vertikalen Swipe

x1 180 
x2 180 
y1 201 
y2 386 

Und horizontal Swipe

x1 89 
x2 293 
y1 371 
y2 371 
left or right 
erhalten

Hoffe das hilft jemandem in der gleichen missliche Lage.