如何自定义MKMapView上的大头针显示的地理位置信息

如何自定义MKMapView上的大头针显示的地理位置信息,第1张

(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation

{

MKPinAnnotationView *pinview = nil

if (annotation != mapView.userLocation) {

static NSString *defaultId = @"目的地枝兆"

pinview = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultId]

if (pinview == nil) {

pinview = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultId] autorelease]

pinview.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]

pinview.pinColor = MKPinAnnotationColorPurple

pinview.canShowCallout = YES

pinview.animatesDrop = YES

pinview.draggable = YES

pinview.selected = YES

}

}

else

{

[mapView.userLocation setTitle:@"I'm here"]

}

return pinview

}

给pinview的pinview.rightCalloutAccessoryView添加一个按钮袭毕,实现委托方法

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

增加按钮的点击响应,切换到一个新的视图,来展示完整的信拍搭芹息

一、先来认识一个协议MKAnnotation

官方文档告诉我们,所有标注的类返咐蔽必须漏州遵守这个协议。所以可以了解,标注这个概念在逻辑属性和视图上是分开的。先来看下这个协议声明了哪些方法:

@protocol MKAnnotation <NSObject>

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate//地理坐标位置

@optional

@property (nonatomic, readonly, copy) NSString *title//标题

@property (nonatomic, readonly, copy) NSString *subtitle//副标题

//拖动时调用

- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate

@end

二、创建一个系统标注大头针

- (void)viewDidLoad {

[super viewDidLoad]

//初始简扒化地图

mapView =[[MKMapView alloc]initWithFrame:self.view.frame]

//设置代理

mapView.delegate=self

//设置位置

mapView.region=MKCoordinateRegionMake(CLLocationCoordinate2DMake(39.26, 116.3), MKCoordinateSpanMake(1.8, 1))

mapView.mapType=MKMapTypeStandard

//初始化一个大头针类

MKPointAnnotation * ann = [[MKPointAnnotation alloc]init]

//设置大头针坐标

ann.coordinate=CLLocationCoordinate2DMake(39.26, 116.3)

ann.title=@"我"

ann.subtitle=@"看这里"

[mapView addAnnotation:ann]

[self.view addSubview:mapView]

}

POI搜索分好多种,主要以城市内搜索为例讲蔽氏铅解:

BMKMapView:地图类

BMKPoiSearch :搜索服务类

BMKCitySearchOption :搜索包装的参数类

1.city,所在的城市

2.keyword,搜索的关键字(如美食,酒店等)

3.pageCapacity,搜索的分页数量(默认为10,最多为50)

4.pageIndex,搜索的页码(默认为0)

首先从整体来说:

BMKCitySearchOption 的对象作为包装参数cityOption,通过BMKPoiSearch的对象self.poiSearch调用poiSearchInCity,

BOOL flag =[self.poiSearch poiSearchInCity:cityOption]

之后通过BMKSearchDelegate的onGetPoiResult:方法

告诉用户获得到搜索返回的数组列表,在onGetPoiResult中包装成若干个大头针模型,之后把大头针模型添加到地图上,如:[self.mapView addAnnotations:annotionArray];

分别先后调用了BMKMapViewDelegate 的viewForAnnotation: (目的:根据传过来的annotion生成对应的View)和didAddAnnotationViews: (之后添加到地图上)的2个方法,宏好完成搜索到的信息在地图上展示的功能。

综上:方法调用顺序为poiSearchInCit:------->onGetPoiResult------->viewForAnnotation(每添加一次调用一次)------->didAddAnnotationViews(每添加核派一次调用一次),最终完成了地图上的Poi(兴趣点)搜索功能。

正向地理编码指的是:告诉地方名称,编码出经纬度

反向地理编码指的是:告诉地理经纬度,编码出地方名称

不要搞混了哦!

BMKMapView:地图类

BMKGeoCodeSearch:地理反地理编码类

BMKGeoCodeSearchOption:地理编码编码参数类

BMKReverseGeoCodeOption:反地理编码编码参数类

1.正向地理编码

1.[self.geoSearch geoCode:geoSearchOption] 触发了正向地理编码

通过BMKGeoCodeSearchDelegate 的onGetGeoCodeResult:方法获得到编码的信息(可以展示),也可以通过[self.mapView addAnnotation:item]调用BMKMapViewDelegate的viewForAnnotation:这个方法,在里面通过大头针模型生成大头针View展示到地图上,完成正向地理编码。

2.反向地理编码

同上:(只是代理方法稍微不同,详见Demo)


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

原文地址: https://outofmemory.cn/bake/11981409.html

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

发表评论

登录后才能评论

评论列表(0条)

保存