在我的地图上,当用户滚动并停止时,我想发送我的web服务,地图中心的lat液化天然气。我的问题是,在用户停止在地图上移动之后,我想触发事件。当前发生的情况是事件立即被触发。我目前正在使用触摸事件
TouchesBegin TouchesCancelled TouchesEnded
这就是我在模拟器上运行时所看到的
当用户触摸屏幕时总是调用TouchesBegin,如果我移动地图,则调用TouchesCancelled。但它是在触摸开始后立即调用的,而不是在用户停止移动时调用的,而是在用户刚刚触摸到地图时调用的,而不是在触摸开始后立即调用的。
#region ToucheEvents
public override void TouchesBegan(NSSet touches, UIEvent evt)
{
base.TouchesBegan(touches, evt);
Console.WriteLine("Touchs Begin");
_cancelTokenSource.Cancel();
_operationMode = ParkingOperationMode.ParkingNotAvailable;
UpdateUi();
}
public override void TouchesCancelled(NSSet touches, UIEvent evt)
{
base.TouchesCancelled(touches, evt);
Console.WriteLine("Touchs Cancelled");
MapViewOnRegionChanged();
}
public override void TouchesEnded(NSSet touches, UIEvent evt)
{
base.TouchesEnded(touches, evt);
Console.WriteLine("Touched Ended");
_cancelTokenSource.Cancel();
}
#endregion
private void MapViewOnRegionChanged()
{
_cancelTokenSource = new CancellationTokenSource();
_cancelToken = _cancelTokenSource.Token;
_cancelToken.Register(CancelCallBack);
if (Utility.ValidateOnlineStatus())
{
ViewDef.ShowLoadingAnimation();
Utility.AddNetworkConnection();
Task.Run(() =>
{
Thread.Sleep(1000);
if (!_cancelToken.IsCancellationRequested)
{
_cancelToken.ThrowIfCancellationRequested();
Console.WriteLine("Firing GetLocation");
GetParkingLocation();
}
else {
Console.WriteLine("Location Cancelled");
}
}, _cancelToken);
}
}发布于 2014-10-01 17:53:23
我认为最好的方法是创建响应地图视图事件的自己的map委托。这样,您就可以监视用户与其交互时对map视图的更改,以及以编程方式更改区域的代码。
public override void ViewDidLoad()
{
var customDelegate = new CustomMapViewDelegate();
customDelegate.OnRegionChanged += TheMapView_OnRegionChanged;
TheMapView.Delegate = customDelegate;
}
public void TheMapView_OnRegionChanged(object sender, MKMapViewChangeEventArgs e)
{
var latitude = TheMapView.Region.Center.Latitude;
var longitude = TheMapView.Region.Center.Longitude;
// Map change logic goes here
}
public class CustomMapViewDelegate : MKMapViewDelegate
{
public event EventHandler<MKMapViewChangeEventArgs> OnRegionChanged;
public override void RegionChanged(MKMapView mapView, bool animated)
{
if (OnRegionChanged != null)
{
OnRegionChanged(mapView, new MKMapViewChangeEventArgs(animated));
}
}
}https://stackoverflow.com/questions/26145150
复制相似问题