Swift-百度地图Api2.9使用

1. 导入下载的百度地图Api的静态库

如:


Swift-百度地图Api2.9使用_第1张图片
注意:mapapi.bundle在BaiduMapAPI_Map.framework中,必须单独拿出来拖出项目(里边有所有用到的图片,否则无法显示)

2. 引入所需的系统库

百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的Xcode工程中引入
CoreLocation.framework
QuartzCore.framework
OpenGLES.framework
SystemConfiguration.framework
CoreGraphics.framework
Security.framework
libsqlite3.0.tbd(xcode7以前为 libsqlite3.0.dylib)
CoreTelephony.framework
libstdc++.6.0.9.tbd(xcode7以前为libstdc++.6.0.9.dylib)
(注:蓝色标识的系统库为v2.9.0新增的系统库,使用v2.9.0及以上版本的地图SDK,务必增加导入这3个系统库。)
添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个系统库即可。

3. 在项目目录下确保有一个.mm文件(名字随便,如:Baidu.mm)

1> 没有64位架构的支持(这个是2.5版本以前才会出现这个问题)
libbaidumapapi.a, missing required architecture x86_64
.a文件缺少64位的架构
解决办法:将Architectures修改位:$(ARCHS_STANDARD_32_BIT)

2> 如果在导入第三方框架时,发现提示"std::"提示错误,说明框架使用了C++
解决办法,随便把项目中的一个文件,扩展名.mm
.m     c语言&OC混编
.mm     c++语言&OC混编
.c     纯C语言
.cpp    纯C++

4. info.plist参数配置

  • xcode7改用更安全的https网络请求,所以要如下属性
NSAppTransportSecurity

    NSAllowsArbitraryLoads
    

  • IOS8开始要使用定位功能必须主动请求用户授权
NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述
  • IOS9中对应用设置了白名单访问机制,如果要跳转到百度地图APP就需要手动设置白名单,否则无法跳转:
LSApplicationQueriesSchemes

    baidumap

  • 在使用Xcode6进行SDK开发过程中,需要添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start failed
CFBundleDisplayName
$(PRODUCT_NAME)  // 值是代表App的名字,可以随便写,也可以使用项目名
  • 完整配置图如下:


    Swift-百度地图Api2.9使用_第2张图片

5. 环境配置

在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC

6. 在桥接文件引入头文件

#import //引入base相关所有的头文件
 
#import //引入地图功能所有的头文件
 
#import //引入检索功能所有的头文件
 
#import //引入云检索功能所有的头文件
 
#import //引入定位功能所有的头文件
 
#import //引入计算工具所有的头文件
 
#import //引入周边雷达功能所有的头文件
 
#import < BaiduMapAPI_Map/BMKMapView.h>//只引入所需的单个头文件

7. 开始使用

在AppDelegate.swift中

var window: UIWindow?
// 添加属性
lazy var navigationController: UINavigationController = {
   return UINavigationController()
}()
lazy var mapManager: BMKMapManager? = {
    // 初始化 BMKMapManager
   return BMKMapManager()
}()

// App启动的单例方法
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
     // 如果要关注网络及授权验证事件,请设定generalDelegate参数
    let ret = mapManager?.start("在此处输入您的授权Key", generalDelegate: nil)
    if !ret! {  // 如果 ret 为 false,先在后面!强制拆包,再在前面!取反
        print("manager start failed!")
    }
    window?.addSubview(navigationController.view)
    window?.makeKeyAndVisible()
    
    return true
}

在ViewController.swift中

lazy var mapView: BMKMapView = {
   return BMKMapView(frame: UIScreen.mainScreen().bounds)
}()

override func viewDidLoad() {
    super.viewDidLoad()
    self.view = mapView;
}

override func viewWillAppear(animated: Bool) {
    mapView.viewWillAppear()
    mapView.delegate = self // 不用的时候需要重置nil,否则影响内存释放
}

override func viewWillDisappear(animated: Bool) {
    mapView.viewWillDisappear()
    mapView.delegate = nil // 重置nil
}

你可能感兴趣的:(Swift-百度地图Api2.9使用)