iphone – 自定义MKAnnotationView标注

iphone – 自定义MKAnnotationView标注,第1张

概述我想创建一个自定义MKAnnotationView标注,如图所示。我已经测试了几个解决方案,但他们只允许自定义的左/右图像和标题/字幕。任何人都可以给我一些源代码或教程链接吗? 目前我无能为力。请帮忙。 我理解你想要一个针与自定义标注。 我们无法创建自定义调用程序,但我们可以使用完全自定义的视图创建注释。所以诀窍是当选择第一个时添加第二个注释,并使第二个注释视图看起来像一个标注气泡。 这是用户dj 我想创建一个自定义MKAnnotationVIEw标注,如图所示。我已经测试了几个解决方案,但他们只允许自定义的左/右图像和标题/字幕。任何人都可以给我一些源代码或教程链接吗?

目前我无能为力。请帮忙。

解决方法 我理解你想要一个针与自定义标注。

我们无法创建自定义调用程序,但我们可以使用完全自定义的视图创建注释。所以诀窍是当选择第一个时添加第二个注释,并使第二个注释视图看起来像一个标注气泡。

这是用户djibouti33和jacob-jennings在答案:MKAnnotationView – Lock custom annotation view to pin on location updates中发布的解决方案,后者又基于来自Asynchrony Solutions的blog post。为了说明的目的,这里是一些来自分叉项目的UML:

这是一个大黑客,但也是我见过实现自定义注释的最干净的方式。

开始一个NSObject“Content”类,它有一个坐标,要使用的调出视图的类(在UML中是AnnotationVIEw,但你可以创建更多并设置它们在这里),和一个随机值字典与标题,照片url等。使用这个类来初始化一个MKAnnotation“Annotation”对象。

#import <MapKit/MapKit.h>@interface Content : NSObject@property (nonatomic,assign) CLLocationCoordinate2D coordinate;// ...@interface Annotation : NSObject <MKAnnotation,AnnotationProtocol>-(ID) initWithContent:(Content*)content;// ...

Annotation实现AnnotationProtocol以宣布它想要处理它自己的MKAnnotationVIEw的创建。也就是说,你的MKMapVIEwDelegate应该有这样的代码:

- (MKAnnotationVIEw *)mapVIEw:(MKMapVIEw *)aMapVIEw vIEwForAnnotation:(ID<MKAnnotation>)annotation {    // if this is a custom annotation,delegate the implementation of the vIEw    if ([annotation conformstoprotocol:@protocol(AnnotationProtocol)]) {        return [((NSObject<AnnotationProtocol>*)annotation) annotationVIEwInMap:mapVIEw];    } else {        // else,return a standard annotation vIEw        // ...    }}

返回的视图将是AnnotationVIEw类型,它实现AnnotationVIEwProtocol以宣布它要处理选择/取消选择。因此,在您的地图视图控制器中,方法mapVIEw:dIDSelectAnnotationVIEw:和mapVIEw:dIDdeselectAnnotationVIEw:应该以类似的方式委托我们之前看到的。

当选择注释时,添加第二个注释(CalloutAnnotation),其遵循相同的行为,但是这次返回的视图(CalloutVIEw)从XIB初始化,并包含Core Graphics代码(在BaseCalloutVIEw中)以动画和复制大喊。

CalloutVIEw类的初始化程序:

- (ID)initWithAnnotation:(CalloutAnnotation*)annotation{    Nsstring *IDentifIEr = NsstringFromClass([self class]);    self = [super initWithAnnotation:annotation reuseIDentifIEr:IDentifIEr];    if (self!=nil){        [[NSBundle mainBundle] loadNibnamed:IDentifIEr owner:self options:nil];        // prevent the tap and double tap from reaching vIEws underneath        UITapGestureRecognizer *tapGestureRecognizer = ...    }    return self;}

为了能够从callout视图中推送另一个视图控制器,我使用了通知。

在顶部链接的SO答案包含两个完整的项目实现此代码(类名称可能不同)。我有另一个项目使用UML上面在https://github.com/j4n0/callout。

总结

以上是内存溢出为你收集整理的iphone – 自定义MKAnnotationView标注全部内容,希望文章能够帮你解决iphone – 自定义MKAnnotationView标注所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1087751.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存