我应该使用MKAnnotation,MKAnnotationView还是MKPinAnnotation?

Jac*_*tti 5 c# mapkit xamarin.ios ios

我正在调用Web服务并在MapView上绘制一些对象.

我无法理解的是我应该使用MKAnnotationPoint还是MkAnnotationView?我不确定.当我使用MKAnnotation时,引脚会显示在地图上,如果我点击它们,它们会显示标题和副标题.

如果我使用MKAnnotationView,引脚会显示,但是当我点击它们时,没有任何反应.

我也试图添加右按钮标注/雪佛龙看按钮,但也无法弄清楚.

这是我的代码示例.

    MKPointAnnotation mk = new MKPointAnnotation();
MKAnnotationView mkView = new MKAnnotationView();
mk.Coordinate = coord;
mk.Title = tl.Name;
mk.Subtitle = DateTime.Now.ToShortDateString();
mkView.Annotation = mk;             
mapView.AddAnnotationObject(mkView);
Run Code Online (Sandbox Code Playgroud)

因此,如果我执行上述操作 - 引脚显示,但我无法点击它们中的任何一个.

如果我只是使用:

mapView.AddAnotationObject(mk); //not using the MkAnnotationView
Run Code Online (Sandbox Code Playgroud)

然后它们都显示出来并且是可点击的.我不知道如何向他们添加rightcalloutbutton.所以这是问题的第二部分.

谢谢.

小智 12

我没有使用过MonoTouch,但我认为底层的SDK使用与iOS相同.

MKAnnotation是基于您的注释数据模型的协议/接口.你也可以使用预先定义的MKPointAnnotation类(该类实现的MKAnnotation接口)为您的注释数据模型对象,而不是创建一个自定义类,如果你需要的是title,subtitlecoordinate.

MKAnnotationView注释的视图应该如何显示,并在地图视图的viewForAnnotation委托方法中设置(不是内联创建的).注释视图可以在具有相同外观的多个注释对象(例如图钉图像)之间重复使用.因此理论上,单个MKAnnotationView实例可以用于实现的多个注释对象MKAnnotation(假设它们不是一次全部在屏幕上).

因此,您创建一个MKAnnotation基于对象的对象并在addAnnotation(即.AddAnnotationObject)调用中传递它.然后在viewForAnnotation委托方法中,创建并返回MKAnnotationView基于对象的实例.

"MKPinAnnotation"(实际上MKPinAnnotationView)是预定义的子类,MKAnnotationView其中提供了默认的图钉图像.您可以MKPinAnnotationViewviewForAnnotation委托方法中返回实例,而不是设计自定义视图.

您将在viewForAnnotation委托方法中创建正确的标注附件按钮的位置.您创建一个UIButton类型UIButtonTypeDetailDisclosure并将其设置为注释视图rightCalloutAccessoryView.

按下按钮将在地图视图的calloutAccessoryControlTapped委托方法中处理,该方法提供对标注视图和标注所在的注释的引用.

给出的方法名称是iOS中的名称,但MonoTouch中的名称应该类似.