2017-04-21 4 views

Antwort

2

Ich sehe viele Beispiele für Renderer, die das für Android und iOS-Plattform tun. Aber nicht für WinRT oder UWP.

Derzeit gibt es keine solche "SwipeGestureRecognizer" API für Xamarin.Forms. Aber Sie könnten benutzerdefinierte SwipeGestureRecognizer Basis auf PanGestureRecognizer. Ich habe den folgenden Code zum Simulieren von "SwipeGestureRecognizer" geschrieben. Aber die Schwelle, die ich verwendet habe, ist nur zum Testen und nicht die echte, Sie können den Schwellenwert basierend auf Ihrer Anforderung ändern.

public enum SwipeDeriction 
{ 
    Left = 0, 
    Rigth, 
    Above, 
    Bottom 
} 

public class SwipeGestureReconginzer : PanGestureRecognizer 
{ 
    public delegate void SwipeRequedt(object sender, SwipeDerrictionEventArgs e); 

    public event EventHandler<SwipeDerrictionEventArgs> Swiped; 

    public SwipeGestureReconginzer() 
    { 
     this.PanUpdated += SwipeGestureReconginzer_PanUpdated; 
    } 

    private void SwipeGestureReconginzer_PanUpdated(object sender, PanUpdatedEventArgs e) 
    { 
     if (e.TotalY > -5 | e.TotalY < 5) 
     { 
      if (e.TotalX > 10) 
      { 
       Swiped(this, new SwipeDerrictionEventArgs(SwipeDeriction.Rigth)); 
      } 
      if (e.TotalX < -10) 
      { 
       Swiped(this, new SwipeDerrictionEventArgs(SwipeDeriction.Left)); 
      } 
     } 

     if (e.TotalX > -5 | e.TotalX < 5) 
     { 
      if (e.TotalY > 10) 
      { 
       Swiped(this, new SwipeDerrictionEventArgs(SwipeDeriction.Bottom)); 
      } 
      if (e.TotalY < -10) 
      { 
       Swiped(this, new SwipeDerrictionEventArgs(SwipeDeriction.Above)); 
      } 
     } 
    } 
} 

public class SwipeDerrictionEventArgs : EventArgs 
{ 
    public SwipeDeriction Deriction { get; } 

    public SwipeDerrictionEventArgs(SwipeDeriction deriction) 
    { 
     Deriction = deriction; 
    } 
} 

MainPage.xaml.cs

var swipe = new SwipeGestureReconginzer(); 
    swipe.Swiped += Tee_Swiped; 
    TestLabel.GestureRecognizers.Add(swipe); 

    private void Tee_Swiped(object sender, SwipeDerrictionEventArgs e) 
    { 
     switch (e.Deriction) 
     { 
      case SwipeDeriction.Above: 
       { 
       } 
       break; 

      case SwipeDeriction.Left: 
       { 
       } 
       break; 

      case SwipeDeriction.Rigth: 
       { 
       } 
       break; 

      case SwipeDeriction.Bottom: 
       { 
       } 
       break; 

      default: 
       break; 
     } 
    } 
+0

Ich habe diesen Ansatz zu testen, noch nicht in der Lage gewesen - aber ich mag es. Ich bin vielleicht in der Lage, den meisten UI-Steuerelementen Swipe-Gesten-Unterstützung hinzuzufügen, ohne dafür Plattform-Renderer schreiben zu müssen. – Ada

+0

Die einzige Einschränkung, die ich sehen kann, ist die Fähigkeit, das Ereignis nur zu erkennen und auszulösen, wenn der Swipe beendet ist - aber mit einer kleinen Feinabstimmung um den Schwellenwert und einem Timer, denke ich, dass ich es schaffen kann. Vielen Dank :) – Ada

Verwandte Themen