iOS 之仿微信添加地址(腾讯地图爬坑)

很久没发文了,因为新东家这边赶项目,今得空撸一篇。话不多说,进入正题。

写这篇的原因:
       1.腾讯地图的开发文档相对高德写的太过简单,安卓到现在还在爬坑
       2.百度或谷歌搜索关键字 “iOS腾讯地图”出来的都是高德地图,百度地图,足以说明腾讯地图...
需求:

产品扔过来一句话 :用腾讯地图,操作效果见微信 我→个人信息→我的地址→新增地址

效果:
自己看   微信 我→个人信息→我的地址→新增地址
设计:
iOS 之仿微信添加地址(腾讯地图爬坑)_第1张图片
设计2.png
iOS 之仿微信添加地址(腾讯地图爬坑)_第2张图片
设计1.jpeg

这里说明一下:搜索并不是用的 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后续补上
以上。

你可能感兴趣的:(iOS 之仿微信添加地址(腾讯地图爬坑))