2016-05-03 18 views
0

Ich habe eine App mit einem Spielbrett und können Fliesen mit Panning mit mr.gestures aufnehmen und verschieben, das funktioniert gut.Pass Gesten an Kinder

Mein Spielbrett ist ein MR.Gestures.AbsoluteLayout und das ist, wo ich die Schwenkgeste erfassen.

Wenn ich dieses Spielbrett als Kind zu einem anderen MR.Gestures.AbsoluteLayout hinzufügen, dann scheint es, dass die Gesten vom Elternteil blockiert werden und es nicht mehr funktioniert.

Gibt es eine Möglichkeit, Gesten an Kinder zu übergeben oder Gesten auf einem Elternteil zu ignorieren?

+0

Ist das auf allen Plattformen oder nur eine? – Cheesebaron

+0

können Sie ein reguläres AbsoluteLayout für den äußeren Container verwenden? – Jason

+0

Haben Sie jemals Ihr Problem gelöst? Ich habe auch etwas ähnliches mit einem MR.Gestures.StackLayout mit MR.Gestures.Label Objekten als Kinder, ich muss beide ihrer "Tapped" Ereignisse verwenden. Mein Problem scheint nur bei iOS zu liegen und das Antippen der Labels funktioniert bei Android einwandfrei. – xceed

Antwort

0

Gibt es eine Möglichkeit, Gesten an Kinder zu übergeben oder Gesten auf einem Elternteil zu ignorieren?

Für mich ist dieses Problem erschien auf Android nur .. Die Antwort ist Ja:

Wenn Eltern Gestenereignis empfängt überprüfen muss, wenn Finger x, y innerhalb bestimmter Childs Aussicht. Wenn ja, ignoriert Parent einfach die Geste.

In Bezug auf den Code, nur kurz nach einem Event-Handler, um die Idee zu bekommen. In meinem Fall, ich habe 2 Kinder (wie und Lesezeichen) über einen übergeordneten Rahmen:

enter image description here

//------------------------------------------------------------------- 
    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 
     //.. 

    }