Přidání rozpoznávání gest potáhnutí prstem
Gesto potáhnutí prstem nastane, když se prst přesune přes obrazovku vodorovným nebo svislým směrem a často se používá k zahájení navigace v obsahu.
Pokud chcete rozpoznat View
gesto potáhnutí prstem, vytvořte SwipeGestureRecognizer
instanci, nastavte Direction
vlastnost na SwipeDirection
hodnotu výčtu (Left
, Right
, Up
nebo Down
), volitelně nastavte Threshold
vlastnost, zpracovat Swiped
událost a přidat nový rozpoznávání gest do GestureRecognizers
kolekce v zobrazení. Následující příklad kódu ukazuje připojenou SwipeGestureRecognizer
k BoxView
:
<BoxView Color="Teal" ...>
<BoxView.GestureRecognizers>
<SwipeGestureRecognizer Direction="Left" Swiped="OnSwiped"/>
</BoxView.GestureRecognizers>
</BoxView>
Tady je ekvivalentní kód jazyka C#:
var boxView = new BoxView { Color = Color.Teal, ... };
var leftSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Left };
leftSwipeGesture.Swiped += OnSwiped;
boxView.GestureRecognizers.Add(leftSwipeGesture);
Třída SwipeGestureRecognizer
také obsahuje Threshold
vlastnost, která může být volitelně nastavena na uint
hodnotu, která představuje minimální vzdálenost potáhnutí prstem, kterou je třeba dosáhnout pro rozpoznání potáhnutí prstem v jednotkách nezávislých na zařízení. Výchozí hodnota této vlastnosti je 100, což znamená, že všechny potáhnutí prsty, které jsou menší než 100 jednotek nezávislých na zařízení, budou ignorovány.
Rozpoznávání směru potáhnutí prstem
V příkladech výše Direction
je vlastnost nastavena na jednu hodnotu z výčtu SwipeDirection
. Je však také možné nastavit tuto vlastnost na více hodnot z výčtu SwipeDirection
, aby Swiped
se událost aktivovala v reakci na potáhnutí prstem ve více než jednom směru. Omezení však znamená, že jeden SwipeGestureRecognizer
může rozpoznat pouze potáhnutí prsty, které se vyskytují na stejné ose. Proto lze potáhnutí prsty, ke kterým dochází na vodorovné ose, rozpoznat nastavením Direction
vlastnosti na Left
hodnotu a Right
:
<SwipeGestureRecognizer Direction="Left,Right" Swiped="OnSwiped"/>
Podobně lze potáhnutí prsty, ke kterým dochází na svislé ose, rozpoznat nastavením Direction
vlastnosti na Up
:Down
var swipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Up | SwipeDirection.Down };
SwipeGestureRecognizer
Případně můžete vytvořit pro každý směr potáhnutí prstem, který rozpozná potáhnutí prsty v každém směru:
<BoxView Color="Teal" ...>
<BoxView.GestureRecognizers>
<SwipeGestureRecognizer Direction="Left" Swiped="OnSwiped"/>
<SwipeGestureRecognizer Direction="Right" Swiped="OnSwiped"/>
<SwipeGestureRecognizer Direction="Up" Swiped="OnSwiped"/>
<SwipeGestureRecognizer Direction="Down" Swiped="OnSwiped"/>
</BoxView.GestureRecognizers>
</BoxView>
Tady je ekvivalentní kód jazyka C#:
var boxView = new BoxView { Color = Color.Teal, ... };
var leftSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Left };
leftSwipeGesture.Swiped += OnSwiped;
var rightSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Right };
rightSwipeGesture.Swiped += OnSwiped;
var upSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Up };
upSwipeGesture.Swiped += OnSwiped;
var downSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Down };
downSwipeGesture.Swiped += OnSwiped;
boxView.GestureRecognizers.Add(leftSwipeGesture);
boxView.GestureRecognizers.Add(rightSwipeGesture);
boxView.GestureRecognizers.Add(upSwipeGesture);
boxView.GestureRecognizers.Add(downSwipeGesture);
Poznámka:
V předchozích příkladech odpovídá stejná obslužná rutina události na Swiped
aktivaci události. Každá SwipeGestureRecognizer
instance však může v případě potřeby použít jinou obslužnou rutinu události.
Reakce na potažení prstem
Obslužná rutina události pro Swiped
událost je zobrazena v následujícím příkladu:
void OnSwiped(object sender, SwipedEventArgs e)
{
switch (e.Direction)
{
case SwipeDirection.Left:
// Handle the swipe
break;
case SwipeDirection.Right:
// Handle the swipe
break;
case SwipeDirection.Up:
// Handle the swipe
break;
case SwipeDirection.Down:
// Handle the swipe
break;
}
}
Můžete ji prozkoumat, abyste zjistili směr potáhnutí prstem. Vlastní SwipedEventArgs
logika odpovídá na potáhnutí podle potřeby. Směr potáhnutí lze získat z Direction
vlastnosti argumentů události, které budou nastaveny na jednu z hodnot výčtu SwipeDirection
. Kromě toho argumenty události mají Parameter
také vlastnost, která bude nastavena na hodnotu CommandParameter
vlastnosti, pokud je definována.
Použití příkazů
Třída SwipeGestureRecognizer
také obsahuje Command
a CommandParameter
vlastnosti. Tyto vlastnosti se obvykle používají v aplikacích, které používají model Model-View-ViewModel (MVVM). Vlastnost Command
definuje ICommand
, která má být vyvolána při rozpoznaném gestu potáhnutí prstem, s CommandParameter
vlastností definující objekt, který se má předat do ICommand.
následujícího příkladu kódu ukazuje, jak svázat Command
vlastnost s definovanou ICommand
v modelu zobrazení, jehož instance je nastavena jako stránka BindingContext
:
var boxView = new BoxView { Color = Color.Teal, ... };
var leftSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Left, CommandParameter = "Left" };
leftSwipeGesture.SetBinding(SwipeGestureRecognizer.CommandProperty, "SwipeCommand");
boxView.GestureRecognizers.Add(leftSwipeGesture);
Ekvivalentní kód XAML je:
<BoxView Color="Teal" ...>
<BoxView.GestureRecognizers>
<SwipeGestureRecognizer Direction="Left" Command="{Binding SwipeCommand}" CommandParameter="Left" />
</BoxView.GestureRecognizers>
</BoxView>
SwipeCommand
je vlastnost typu ICommand
definovaná v instanci modelu zobrazení, která je nastavena jako stránka BindingContext
. Když se rozpozná gesto potáhnutí prstem, Execute
spustí se metoda objektu SwipeCommand
. Argumentem metody Execute
je hodnota CommandParameter
vlastnosti. Další informace o příkazech naleznete v části Příkazové rozhraní.
Vytvoření kontejneru potáhnutí prstem
Třída SwipeContainer
, která je znázorněna v následujícím příkladu kódu, je generalizovaná třída rozpoznávání potáhnutí prstem, která je zabalena kolem View
provedení rozpoznávání gest potáhnutí prstem:
public class SwipeContainer : ContentView
{
public event EventHandler<SwipedEventArgs> Swipe;
public SwipeContainer()
{
GestureRecognizers.Add(GetSwipeGestureRecognizer(SwipeDirection.Left));
GestureRecognizers.Add(GetSwipeGestureRecognizer(SwipeDirection.Right));
GestureRecognizers.Add(GetSwipeGestureRecognizer(SwipeDirection.Up));
GestureRecognizers.Add(GetSwipeGestureRecognizer(SwipeDirection.Down));
}
SwipeGestureRecognizer GetSwipeGestureRecognizer(SwipeDirection direction)
{
var swipe = new SwipeGestureRecognizer { Direction = direction };
swipe.Swiped += (sender, e) => Swipe?.Invoke(this, e);
return swipe;
}
}
Třída SwipeContainer
vytvoří SwipeGestureRecognizer
objekty pro všechny čtyři směry potáhnutí prstem a připojí Swipe
obslužné rutiny událostí. Tyto obslužné rutiny událostí vyvolávají Swipe
událost definovanou objektem SwipeContainer
.
Následující příklad kódu XAML ukazuje zabalení SwipeContainer
třídy :BoxView
<ContentPage ...>
<StackLayout>
<local:SwipeContainer Swipe="OnSwiped" ...>
<BoxView Color="Teal" ... />
</local:SwipeContainer>
</StackLayout>
</ContentPage>
Následující příklad kódu ukazuje, jak SwipeContainer
se zalamuje na stránce jazyka BoxView
C#:
public class SwipeContainerPageCS : ContentPage
{
public SwipeContainerPageCS()
{
var boxView = new BoxView { Color = Color.Teal, ... };
var swipeContainer = new SwipeContainer { Content = boxView, ... };
swipeContainer.Swipe += (sender, e) =>
{
// Handle the swipe
};
Content = new StackLayout
{
Children = { swipeContainer }
};
}
}
BoxView
Když obdrží gesto potáhnutí prstem, Swiped
událost se SwipeGestureRecognizer
aktivuje. To zpracovává SwipeContainer
třída, která aktivuje vlastní Swipe
událost. Tato Swipe
událost se zpracovává na stránce. Pak SwipedEventArgs
můžete prozkoumat směr potáhnutí prstem a podle potřeby reagovat na potáhnutí vlastní logikou.