Передайте жесты детям

У меня есть приложение с игровой доской, и я могу собирать и перемещать плитки с помощью панорамирования, используя 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
        //..

    }
Другие вопросы по тегам