iOS Developer

ZFMapManager 地图选择器

2017-02-19  本文已影响0人  Aaronn

ZFMapManager

https://github.com/FanyiZeng/ZFMapManager

选择地点
搜索地点

管理定位模块
使用说明:

mapapi.bundle 路径:BaiduMapAPI_Map.framework/Resources
- (instancetype)init
{
    self = [super init];
    if (self) {
        // 要使用百度地图,请先启动BaiduMapManager
        _mapManager = [[BMKMapManager alloc]init];
        // 如果要关注网络及授权验证事件,请设定     generalDelegate参数
        // BundleID 为 net.yeah.fanyizeng.---- 如果无法使用请更换为自己注册的BundleID
        BOOL ret = [_mapManager start:@"tUWhg88bXiiBnR39fri78LBhTEc0bN95"  generalDelegate:nil];
        if (!ret) {
            NSLog(@"manager start failed!");
        }
        ...

使用接口

使用ZFMapManager提供的方法进行地图操作

// 第一次调用_MapMgr 会对百度SDK进行初始化,可以参见 init 函数 SDK所有的数据访问功能依赖于初始化,所以请在使用前提前构造Manager
#define _MapMgr ([ZFMapManager sharedInstance])
// 使用宏定义调用Manager 用于向百度注册你的AK 这一步可以在程序启动时操作.
_MapMgr;
/// 界面显示需要等待 链接上百度SDK 才能刷新位置成功 可以使用延迟,来保证成功获取定位
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        //Demo中获取定位的方法  
        [self currentLocAction:nil];
    });
/// 当前城市 可能为nil 获取一次后如果为nil会自动刷新当前城市位置,并抛出通知. 
/// 设置城市位置信息,如果为nil 会自动通过通知中心来更新
    self.currentCityLabel.text = _MapMgr.city;

 /// 注册通知 可以对通知进行监听,获取最新的所在城市信息 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mapManagerCityDidChangeNotification:) name:KZFMapManagerCityDidChangeNotification object:nil];

#pragma mark - 接收城市和地区更新的消息
- (void)mapManagerCityDidChangeNotification:(NSNotification *)noti
{
    /// 接收城市位置信息
    if (noti.object[ZFMapCityKEY]) {
        self.currentCityLabel.text = noti.object[ZFMapCityKEY];
    }
    
    if (noti.object[ZFMapDistrictKEY]) {
        self.currentDistrict.text = noti.object[ZFMapDistrictKEY];
    }
}

    //制作弱引用替身
    __weak typeof(self) weakSelf = self;
    [_MapMgr nearByPoi:^(NSArray *poi) {
        /// 获取当前位置信息
        weakSelf.currentLocLabel.text = poi.firstObject[ZFMapNameKEY];
    }];
    

/// 获取地图选择器
    ZFAddressSelectorController *vc = [ZFAddressSelectorController new];//[[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]instantiateViewControllerWithIdentifier:@"ZFAddressSelectorController"];
    
    [self.navigationController pushViewController:vc animated:YES];
/// 选择的地点. 这个通知如果不使用 ZFAddressSelectorController类 需要自己手动实现POST部分 他响应了Demo中的cell点击
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mapManagerLocationDidSelectedNotification:) name:KZFMapManagerLocationDidSelectedNotification object:nil];

#pragma mark - 接收选中的地点,并进行地区更新
- (void)mapManagerLocationDidSelectedNotification:(NSNotification *)noti{
    
    /// 设置当前位置信息
    self.currentLocLabel.text = noti.object[ZFMapNameKEY];
    
    /// 选中热点信息后,可以搜索当前热点位置,用于更改城市信息
    CGPoint pt = [noti.object[ZFMapPointKEY] CGPointValue];
    NSLog(@"X:%f  Y:%f",pt.x,pt.y);
    CLLocationCoordinate2D point = {pt.y,pt.x};
    [_MapMgr searchCityNameWithCoordinate2D:point];
    
}

  1. tableView的样式定制,可以在ZFAddressSelectorControllertb属性进行定制
  2. mapView界面中,定位按钮和选择按钮可以在ZFMapView.m L:49-70行进行样式定制
  3. searchBar是tableView的表头视图.

github : https://github.com/FanyiZeng/ZFMapManager

上一篇下一篇

猜你喜欢

热点阅读