zoukankan      html  css  js  c++  java
  • Xcode 7.0以后 iOS 9.0以后 最新百度地图 详细使用

    具体的集成方法 直接官方文档就好了 这里只做 使用说明:

    如果集成没有问题 那么跟着我的以下步骤做 绝对没有问题:(在这里说明一下 我把 定位和地图 分块写出来的这样比较清晰)

    1.appDelegate   倒入头文件  定义百度管理者属性属性

    @property (strong, nonatomic) BMKMapManager *mapManager;

     并在启动方法中实现方法

    #import <BaiduMapAPI_Map/BMKMapView.h>//只引入所需的单个头文件

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

      #pragma mark - 百度地图

        // 要使用百度地图,请先启动BaiduMapManager

        _mapManager = [[BMKMapManager alloc]init];

        // 如果要关注网络及授权验证事件,请设定     generalDelegate参数

        BOOL ret = [_mapManager start:@"SjoQXduG5ibrPCHn4PfZy87p"  generalDelegate:nil]; // 蓝色部分替换你自己的key

        if (!ret) {

            NSLog(@"百度地图管理者 启动失败");

        }

    }

    2.在要使用地图的类中  倒入头文件 进行使用百度地图的功能

    #import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件

    #import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件

    #import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的头文件

    #import <BaiduMapAPI_Utils/BMKUtilsComponent.h>//引入计算工具所有的头文件

    #import <BaiduMapAPI_Map/BMKMapView.h>//只引入所需的单个头文件

     

    3.调用方法是用 直接贴代码注释很详细

    @interface MapLawDetailViewController () <BMKMapViewDelegate, BMKLocationServiceDelegate>

    /**

     *  百度地图

     */

    @property (strong, nonatomic) BMKMapView *mapView;

     

    /**

     *  定为服务

     */

    @property (strong, nonatomic) BMKLocationService *locService;

    @end

     

    @implementation MapLawDetailViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        

        // 启动定位

        [self locService];

        

        // 显示地图

        [self.view addSubview:self.mapView];

    }

     

    #pragma mark - 定位功能------------------------------------

    - (BMKLocationService *)locService {

        if (_locService == nil) {

            _locService = [[BMKLocationService alloc]init];

            _locService.delegate = self;

            _locService.distanceFilter = 100.f;

            // 后台也定位 并且屏幕上方有蓝条提示

            _locService.allowsBackgroundLocationUpdates = YES;

            //启动LocationService

            [_locService startUserLocationService];

        }

        return _locService;

    }

     

    //实现相关delegate 处理位置信息更新

    //处理位置坐标更新

    - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation

    {

        // 1.显示用户位置

        self.mapView.showsUserLocation = YES;

        // 2.更新用户最新位置到地图上

        [self.mapView updateLocationData:userLocation];

        

        // 3.设置中心 为 用户位置

        CLLocationCoordinate2D center = userLocation.location.coordinate;

        CLLocationDegrees latitude = 0.5;

        CLLocationDegrees longitude = 0.5;

        

        // 4.设置跨度 数值越小 越精确

        BMKCoordinateSpan span = BMKCoordinateSpanMake(latitude, longitude);

        // 5.设置区域 中心店 和 范围跨度

        BMKCoordinateRegion region = BMKCoordinateRegionMake(center, span);

        

        // 设置地图显示区域范围

        [self.mapView setRegion:region animated:YES];

    }

     

     

     

    #pragma mark - 地图功能-------------------------------------------

    - (BMKMapView *)mapView {

        if (_mapView == nil) {

            _mapView = [[BMKMapView alloc]initWithFrame:self.view.bounds];

        }

        return _mapView;

    }

     

    - (void)viewWillAppear:(BOOL)animated

    {

        [self.mapView viewWillAppear];

        self.mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放

    }

    - (void)viewWillDisappear:(BOOL)animated

    {

        [self.mapView viewWillDisappear];

        self.mapView.delegate = nil; // 不用时,置nil

    }

     

    - (void)viewDidAppear:(BOOL)animated {

        // 添加一个PointAnnotation模型

        BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];

        CLLocationCoordinate2D coor; // 定义模型经纬度

        coor.latitude = 39.915;

        coor.longitude = 116.404;

        annotation.coordinate = coor;

        annotation.title = @"这里是北京";

        

        [_mapView addAnnotation:annotation];

    }

     

    //  Override每当添加一个大头针就会调用这个方法(对大头针没有进行封装)

    - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation {

        

        // 这里的BMKAnnotationView 就相当于是UITableViewCell一样 其实就是一个View我们也是通过复用的样子一样进行使用。 而传进来的annotation 就是一个模型,它里面装的全都是数据!

        if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {

            // 如果大头针类型 是我们自定义的百度的 而且是后加的大头针模型类 的话 才执行

            static NSString *const ID = @"myAnnotation";

            

            BMKPinAnnotationView *newAnnotationView = (BMKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];

            

            if (newAnnotationView == nil) {

                newAnnotationView =  [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID];

            }

            

            newAnnotationView.pinColor = BMKPinAnnotationColorPurple;

            newAnnotationView.animatesDrop = YES; // 设置该标注点动画显示

            newAnnotationView.image = [UIImage imageNamed:@"marker"];

            return newAnnotationView;

        }

        // 这里是说定位自己本身的那个大头针模型 返回nil 自动就变成蓝色点点

        return nil;

    }

     

    总结:百度地图是用很方便,相对于之前的版本,废弃了一些api 这样更简单易用。

    (如果有写的不对的地方欢迎与我交流 QQ:234009184 我将怀着谦卑的心 努力学习 感激不尽)

  • 相关阅读:
    清除浮动
    版心和布局流程
    浮动(float)
    盒子模型(CSS重点)
    CSS 三大特性
    CSS 背景(background)
    移动web开发之rem布局
    .移动端常见布局
    移动端基础
    CSS高级技巧
  • 原文地址:https://www.cnblogs.com/zhangguoliang1992/p/4889419.html
Copyright © 2011-2022 走看看