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

发布于 2024-12-12 17:07:42 字数 776 浏览 0 评论 0原文

我正在调用一个网络服务并在 MapView 上绘制一些对象。

我不明白的是我应该使用 MKAnnotationPoint 还是 MkAnnotationView?我不知道。当我使用 MKAnnotation 时,图钉会显示在地图上,如果我单击它们,它们会显示标题和副标题。

如果我使用 MKAnnotationView,引脚会显示,但当我单击它们时,什么也不会发生。

我还尝试添加正确的按钮标注/V 形按钮,但也无法弄清楚。

这是我的代码的示例。

    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);

因此,如果我执行上述操作 - 引脚会显示,但我无法单击其中任何一个。

如果我只是使用:

mapView.AddAnotationObject(mk); //not using the MkAnnotationView

那么它们都会显示出来并且可以点击。不过,我不确定如何向它们添加正确的标注按钮。这是问题的第二部分。

谢谢。

I'm calling a webservice and plotting some objects on a MapView.

What I'm failing to understand is should I use MKAnnotationPoint or MkAnnotationView? I'm not sure. When I use MKAnnotation, the pins show up on the map, if I click on them, they show me the title, and subtitle.

If I use MKAnnotationView, the pins show up but when I click on them, nothing happens.

I'm also trying to add the right button callout/chevron looking button but haven't been able to figure that out either.

Here's an example of my code.

    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);

So if I do the above - the pins show up, but I can't click on any of them.

If I just use:

mapView.AddAnotationObject(mk); //not using the MkAnnotationView

Then they all show up and are clickable. I'm not sure how to add the rightcalloutbutton to them yet though. So that's kinda a second part to the question.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海的爱人是光 2024-12-19 17:07:42

我没有使用过 MonoTouch,但我相信底层 SDK 用法与 iOS 相同。

MKAnnotation 是注释数据模型所基于的协议/接口。如果您只需要 ,您还可以为注释数据模型对象使用预定义的 MKPointAnnotation 类(它实现 MKAnnotation 接口),而不是创建自定义类>标题副标题坐标

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

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

“MKPinAnnotation”(实际上是 MKPinAnnotationView)是 MKAnnotationView 的预定义子类,它提供默认的图钉图像。您可以在 viewForAnnotation 委托方法中返回 MKPinAnnotationView 的实例,而不是设计自定义视图。

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

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

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

I haven't used MonoTouch but the underlying SDK usage is the same as iOS I believe.

MKAnnotation is the protocol/interface to base your annotation data model on. You could also use the pre-defined MKPointAnnotation class (which implements the MKAnnotation interface) for your annotation data model objects instead of creating a custom class if all you need is title, subtitle, and coordinate.

MKAnnotationView is how the annotation's view should appear and is set in the map view's viewForAnnotation delegate method (not created inline). Annotation views can be re-used between multiple annotation objects that will have the same appearance (for example a pin image). So theoretically a single MKAnnotationView instance might be used for multiple annotation objects that implement MKAnnotation (assuming they are not all on the screen at once).

So you create an MKAnnotation-based object and pass that in the addAnnotation (ie. AddAnnotationObject) call. Then in the viewForAnnotation delegate method, you create and return an instance of an MKAnnotationView-based object.

"MKPinAnnotation" (actually MKPinAnnotationView) is a pre-defined subclass of MKAnnotationView which provides a default pin image. You can return an instance of MKPinAnnotationView in the viewForAnnotation delegate method instead of designing a custom view.

The place where you would create the right callout accessory button is in the viewForAnnotation delegate method. You create a UIButton of type UIButtonTypeDetailDisclosure and set it as the annotation view's rightCalloutAccessoryView.

The button press would be handled in the map view's calloutAccessoryControlTapped delegate method which provides a reference to the annotation view and annotation the callout is in.

The method names given are the ones in iOS but the names in MonoTouch should be similar.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文