美文网首页iOS地图开发iOS开发资料收集区
自定义MKMapView大头针标注图片替换

自定义MKMapView大头针标注图片替换

作者: FengxinLi | 来源:发表于2015-11-13 11:40 被阅读1818次

看官方的文档,以及看苹果官方的demo。An annotation object is any object that conforms to the MKAnnotation protocol。

当我们自定义注释对象需要实现MKAnnotation协议就可以了。但是进入MKAnnotation一看

只有一个属性。但是后面的title,subtitle,以及set方法。应该怎么理解呢?我真的没理解。希望明白的大神能够指出。看官方的demo

MapCalloutsUsingMapKitAnnotations。里面自定义了三种不同的注释对象。

其实当我们在MKMapView里面增加一个标注的时候。并且不实现任何协议。就增加一个

MKPointAnnotation *pa = [[MKPointAnnotation   alloc]init];

pa.coordinate= newLocation.coordinate;

[_mapviewaddAnnotation:pa];

MKMapView默认是显示红色的大头针。如下如所示

这里还留有一个疑问我自己还没弄明白。当在map上面显示用户的当前位置。并且当前位置的经纬度给增加一个标注对象。他们为什么没有重合。或者他们的经纬度不是一套,就像百度的火星地图?希望明白的大神指出。

如果不详显示默认的红色的大头针。那么需要自定义。

下面是我看了官方文档自己定义的

#import

#import

@interfaceFishFxAnnotation :NSObject

@property(nonatomic,readwrite)CLLocationCoordinate2Dcoordinate;

+(MKAnnotationView*)createViewAnnotationForMapView:(MKMapView*)mapViewannotation:(id)annotation;

@end

实现

#import"FishFxAnnotation.h"

@implementationFishFxAnnotation

-(NSString*)title{

return@"天气";

}

-(NSString*)subtitle{

return@"subtitle";

}

+(MKAnnotationView*)createViewAnnotationForMapView:(MKMapView*)mapViewannotation:(id)annotation{

MKAnnotationView*returnedAnnotationView =

[mapViewdequeueReusableAnnotationViewWithIdentifier:NSStringFromClass([FishFxAnnotationclass])];

if(returnedAnnotationView ==nil)

{

returnedAnnotationView =

[[MKAnnotationViewalloc]initWithAnnotation:annotation

reuseIdentifier:NSStringFromClass([FishFxAnnotationclass])];

returnedAnnotationView.canShowCallout=YES;

// offset the flag annotation so that the flag pole rests on the map coordinate

returnedAnnotationView.centerOffset=CGPointMake( returnedAnnotationView.centerOffset.x+ returnedAnnotationView.image.size.width/2, returnedAnnotationView.centerOffset.y- returnedAnnotationView.image.size.height/2);

}

else

{

returnedAnnotationView.annotation= annotation;

returnedAnnotationView.centerOffset=CGPointMake( returnedAnnotationView.centerOffset.x+ returnedAnnotationView.image.size.width/2, returnedAnnotationView.centerOffset.y- returnedAnnotationView.image.size.height/2);

}

returnreturnedAnnotationView;

}

@end

在UIViewController里面的实现

- (void)viewDidLoad {

[superviewDidLoad];

_mapView=[[MKMapViewalloc]initWithFrame:CGRectMake(0,0,320,400)];

_mapView.delegate=self;

[self.viewaddSubview:_mapView];

FishFxAnnotation*annation=[[FishFxAnnotationalloc]init];

[annationsetCoordinate:CLLocationCoordinate2DMake(30.23423,104.345354)];

[_mapViewaddAnnotation:annation];

FishFxAnnotation*annation2=[[FishFxAnnotationalloc]init];

[annation2setCoordinate:CLLocationCoordinate2DMake(30.63423,104.645354)];

[_mapViewaddAnnotation:annation2];

[_mapViewshowAnnotations:@[annation,annation2]animated:YES];

}

- (nullableMKAnnotationView*)mapView:(MKMapView*)mapView viewForAnnotation:(id)annotation{

MKAnnotationView*returnAnnotationView=nil;

if([annotationisKindOfClass:[FishFxAnnotationclass]])

{

returnAnnotationView = [FishFxAnnotationcreateViewAnnotationForMapView:self.mapViewannotation:annotation];

returnAnnotationView.image= [UIImageimageNamed:@"flag.png"];

}

returnreturnAnnotationView;

}

运行效果图如下

增加的二个标注红色的旗帜。

补充一点。CoreLocation获取的经纬度是地图坐标。而mapkit里面的坐标是火星坐标。所以需要转化哈。转化之后他们会重叠

相关文章

  • 自定义MKMapView大头针标注图片替换

    看官方的文档,以及看苹果官方的demo。An annotation object is any object th...

  • 大头针Annotation

    自定义大头针 使用大头针 点击添加大头针 自定义大头针颜色和动画 系统大头针的处理 自定义大头针图片 修改大头针模...

  • 地图(二)之MapKit

    MapKit 用于地图展示,例如大头针,路线,覆盖层展示等(着重界面展示) 一、MKMapView MapKit通...

  • iOS 地图开发(MapKit)(二)

    相关类的介绍:MKAnnotation(大头针协议)大头针数据类(自定义的大头针需要遵守大头针协议)MKPoint...

  • iOS 系统自带API地图开发相关(二)

    地图-自定义大头针 关于大头针视图分两类: MKPinAnnotationView : apple自带的大头针,可...

  • 自定义高德地图大头针气泡

    当高德地图自带的大头针气泡不能满足项目需求时,需要开发者自定义地图大头针气泡。比如气泡上显示个图片,标题或者其他之...

  • 自定义大头针

    自定义大头针其实没什么东西,讲讲简单的自定义大头针吧! 1.需要定义大头针模型(里面至少有三个属性)#import...

  • 高德地图---iOS笔记摘录

    概念 使用 地图显示 交互 显示 计算 其他 1.1 大头针 自定义大头针: MAPointAnnotation ...

  • 压缩图片

    前几天在做地图,自定义大头针的时候,使用网络图片,出现图片过大,没法调整大小, 在网上找的一个压缩图片的方法 解决...

  • 百度地图大头针点击之后不调用mapView: viewForAn

    1.如何你自定义的大头针,看看大头针的UIImageView的userInteractionEnabled属性有没...

网友评论

  • 无厌_:我模拟器上cpu一拖会爆到100+,不动就会恢复,内存占用平均150-200,正常吗
  • 无厌_:打不出来。。。有些地方没分空格,分开也看不懂

本文标题:自定义MKMapView大头针标注图片替换

本文链接:https://www.haomeiwen.com/subject/buzhhttx.html