Передайте жесты детям
У меня есть приложение с игровой доской, и я могу собирать и перемещать плитки с помощью панорамирования, используя mr.gestures, это работает хорошо.
Моя игровая доска MR.Gestures.AbsoluteLayout
и вот где я фиксирую жест панорамирования.
Если я добавлю эту игровую доску в детстве к другому MR.Gestures.AbsoluteLayout
тогда кажется, что жесты заблокированы родителем, и это больше не работает.
Есть ли способ передать жесты детям или игнорировать жесты какого-либо из родителей?
1 ответ
Есть ли способ передать жесты детям или игнорировать жесты какого-либо из родителей?
Для меня эта проблема появилась только на Android. Ответ: Да:
Когда родитель получает событие жеста, он должен проверить, находится ли палец x,y в пределах определенных дочерних представлений. Если да, родитель просто игнорирует этот жест.
Что касается кода, мне нужно пройти всего один обработчик событий, чтобы получить идею. В моем случае у меня есть 2 дочерних элемента (как и закладка) над родительским фреймом:
//-------------------------------------------------------------------
private void OnTapped_MainFrame(object sender, TapEventArgs e)
//-------------------------------------------------------------------
{
//Get parent screen abs pos in pixels
//We are using native code get absolute screen position
var ptFrame = DependencyService.Get<INiftyHelpers>().GetViewAbsolutePosition((View)sender);
//Gets childs (hotspots) screen abs position in pixels
var ptFav = DependencyService.Get<INiftyHelpers>().GetViewAbsolutePosition((View)hsFav);
var ptLike = DependencyService.Get<INiftyHelpers>().GetViewAbsolutePosition((View)hsLike);
//Gets childs (hotspots) rectangles, everything in pixels using screen density
var rectFav = new Rectangle(ptFav, new Size(hsFav.Width * AppHelper.DisplayDensity, hsFav.Height * AppHelper.DisplayDensity));
var rectLike = new Rectangle(ptLike, new Size(hsLike.Width * AppHelper.DisplayDensity, hsLike.Height * AppHelper.DisplayDensity));
//Convert the finger XY to screen pos in pixels
var ptTouch = new Point(ptFrame.X + e.Center.X * AppHelper.DisplayDensity, ptFrame.Y + e.Center.Y * AppHelper.DisplayDensity); //absolute relative to screen
//check if withing childs
if (rectFav.Contains(ptTouch) || rectLike.Contains(ptTouch))
return; //Ignore input and let childs process their gestures!
//Process input
//..
}