J'implémente un moteur de rendu personnalisé pour Xamarin Forms Map afin de mettre en œuvre un événement Tap.Xmasquins Forms Map Tap Gesture IOS
Je le PCL je ce code:
public class ExtMap : Map
{
/// <summary>
/// Event thrown when the user taps on the map
/// </summary>
public event EventHandler<MapTapEventArgs> Tapped;
#region Constructors
/// <summary>
/// Default constructor
/// </summary>
public ExtMap()
{
}
/// <summary>
/// Constructor that takes a region
/// </summary>
/// <param name="region"></param>
public ExtMap(MapSpan region)
: base(region)
{
}
#endregion
public void OnTap(Position coordinate)
{
OnTap(new MapTapEventArgs { Position = coordinate });
}
protected virtual void OnTap(MapTapEventArgs e)
{
var handler = Tapped;
if (handler != null)
handler(this, e);
}
}
Et dans mon projet IOS ce code:
public class ExtMapRenderer : MapRenderer
{
private readonly UITapGestureRecognizer _tapRecogniser;
public ExtMapRenderer()
{
_tapRecogniser = new UITapGestureRecognizer(OnTap)
{
NumberOfTapsRequired = 1,
NumberOfTouchesRequired = 1
};
}
private void OnTap(UITapGestureRecognizer recognizer)
{
var cgPoint = recognizer.LocationInView(Control);
var location = ((MKMapView)Control).ConvertPoint(cgPoint, Control);
((ExtMap)Element).OnTap(new Position(location.Latitude, location.Longitude));
}
protected override void OnElementChanged(ElementChangedEventArgs<View> e)
{
if (Control != null)
Control.RemoveGestureRecognizer(_tapRecogniser);
base.OnElementChanged(e);
if (Control != null)
{
var nativeMap = Control as MKMapView;
nativeMap.ShowsUserLocation = true;
Control.AddGestureRecognizer(_tapRecogniser);
}
}
}
Dans le simulateur parfois l'événement est déclenché, mais je dois cliquer au hasard un beaucoup de temps sur la carte. Dans mon iPhone, l'événement n'est jamais déclenché.
Dans le téléphone Android & Emulator, l'événement fonctionne correctement, donc je soupçonne une mauvaise implémentation dans IOS Project mais je ne sais pas comment je peux l'améliorer.
Il est préférable, mais parfois il ne fonctionne pas .... Dans ma précédente mise en œuvre, je ne travaille pas du tout MKMapView, ce possible que je manqué quelque chose? – OrcusZ