Ich implementiere einen benutzerdefinierten Renderer für Xamarin Forms Map, um ein Tap-Ereignis zu implementieren.Xamarin Forms Map Tippen Sie auf Gesture IOS
ich die PCL Ich habe diesen 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);
}
}
Und in meinem IOS-Projekt diesen 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);
}
}
}
Im Simulator manchmal wird das Ereignis ausgelöst hat, aber ich habe zufällig einen Klick viel Zeit in der Karte. In meinem iPhone wird das Ereignis nie ausgelöst.
In Android-Handy & Emulator, das Ereignis funktioniert ordnungsgemäß, so vermute ich eine schlechte Umsetzung in IOS-Projekt, aber ich weiß nicht, wie ich es verbessern kann.
Es ist besser, aber manchmal hat es nicht funktioniert .... In meinem vorherigen Implementierung i mit MKMapView überhaupt nicht funktionieren, dass möglich, dass ich verpasst etwas? – OrcusZ