首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKMapView触觉事件

MKMapView触觉事件
EN

Stack Overflow用户
提问于 2014-10-01 15:39:58
回答 1查看 746关注 0票数 0

在我的地图上,当用户滚动并停止时,我想发送我的web服务,地图中心的lat液化天然气。我的问题是,在用户停止在地图上移动之后,我想触发事件。当前发生的情况是事件立即被触发。我目前正在使用触摸事件

TouchesBegin TouchesCancelled TouchesEnded

这就是我在模拟器上运行时所看到的

当用户触摸屏幕时总是调用TouchesBegin,如果我移动地图,则调用TouchesCancelled。但它是在触摸开始后立即调用的,而不是在用户停止移动时调用的,而是在用户刚刚触摸到地图时调用的,而不是在触摸开始后立即调用的。

代码语言:javascript
复制
        #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);
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-01 17:53:23

我认为最好的方法是创建响应地图视图事件的自己的map委托。这样,您就可以监视用户与其交互时对map视图的更改,以及以编程方式更改区域的代码。

代码语言:javascript
复制
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));
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26145150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档