很久没发文了,因为新东家这边赶项目,今得空撸一篇。话不多说,进入正题。
写这篇的原因:
1.腾讯地图的开发文档相对高德写的太过简单,安卓到现在还在爬坑
2.百度或谷歌搜索关键字 “iOS腾讯地图”出来的都是高德地图,百度地图,足以说明腾讯地图...
需求:
产品扔过来一句话 :用腾讯地图,操作效果见微信 我→个人信息→我的地址→新增地址
效果:
自己看 微信 我→个人信息→我的地址→新增地址
设计:
这里说明一下:搜索并不是用的 UISearchController ,是两个自定义视图。另外通过监听tableview的上下滑动来改变地图和tableview的frame值,就可以达到微信上那样的效果。
上主菜
完成这个模块需要先去腾讯位置服务申请key(Android和iOS同一个), 用到定位服务以及地图服务,其中地图服务包含Map和POI(搜索),因此这需要用到以下3个SDK ,地图用的是2D。
·定位SDK
·2D地图SDK /3D地图SDK
·搜索SDK
然后看文档一步一步来,下面是有些注意点:
1 定位服务的回调并没用到
- (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager
didUpdateLocation:(TencentLBSLocation *)location {
//定位结果 但这并不需要用到
NSLog(@"location:%@", location.location);
}
2 地图的位置刷新回调中需要关闭定位,否则后续搜索的时候每隔几秒就会重新回到定位的点,循环执行此回调
- (void)mapView:(QMapView *)mapView didUpdateUserLocation:(QUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation
{
//获取到位置搜索
[self searchPOIWith:userLocation.location.coordinate];
//关闭定位
self.mapView.showsUserLocation = NO;
}
ps: 以上 searchPOIWith 是我抽出来的一个方法,CLLocationCoordinate2D类型的坐标作为参数,因为它在位置变化的时候都会用到:
·刚进此页面定位的时候
·搜索关键字的时候
·拖动地图更新位置的时候
下面是这个方法的具体实现
-(void)searchPOIWith:(CLLocationCoordinate2D )userLocation{
//添加大头针
if (point) {
//加之前移除原来的,以保证地图上只有一个大头针
[self.mapView removeAnnotation:point];
}
point = [[QPointAnnotation alloc] init];
point.coordinate = userLocation;
[self.mapView addAnnotation:point ];
//刷新位置,设置地图中心点
self.mapView.centerCoordinate = userLocation;
QMSPoiSearchOption *poiSearchOption = [[QMSPoiSearchOption alloc] init];
//选择周边检索
[poiSearchOption setBoundaryByNearbyWithCenterCoordinate:userLocation radius:1000];
//设置检索分类
[poiSearchOption setFilterByCategories:@"教育学校",@"基础设施",@"美食",@"购物",@"生活服务",@"娱乐休闲",@"酒店宾馆",@"旅游景点",@"房产小区",nil];
[self.searcher searchWithPoiSearchOption:poiSearchOption];
}
代码demo后续补上
以上。