接上一片博文,我们已经创建好了桥接文件.那么如何调用?

在项目最开始的时候,我写了这个项目使用cocoapod管理依赖库,在这里,还是多记录一下吧.

1 在你的已经安装好cocoapod的电脑上,打开终端,输入pod search baidumapapi ,得到的结果如下:

ios swift 使用 oc 宏 oc调用swift库_swift

剪头中的就是我们需要的,然后在我们的项目中的podfile中把pod 'BaiduMapAPI' '~>2.8.1'加进去并且保存

2 加好了类库当然需要安装到项目中,所以输入pod install,等待安装完毕

3 重新打开项目,发现项目结构变成如下模样:

  

ios swift 使用 oc 宏 oc调用swift库_百度地图_02

 然后打开我们的桥接文件,引用百度地图的头文件

 

command + B 试试是否编译成功,成功就可进行下一步了.

4 本来项目开始应该进入的是首页,但是上面既然写了如何使用百度地图API,那么就直接写在这里,后面写到使用百度地图的页面就不写了..

   代码如下:

   ① 首先在appdelegate里添加红色框框里的代码,里面剪头部分需要你到百度官网拿项目的bundle identify来生成一个key,不要按照我这个写啊

       

ios swift 使用 oc 宏 oc调用swift库_移动开发_03

    ②  然后在控制器里代码如下:

       

import UIKit
 
class ViewController: UIViewController ,BMKMapViewDelegate ,BMKLocationServiceDelegate{
    
    var mapView: BMKMapView!
    var locService: BMKLocationService!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        mapView = BMKMapView(frame: self.view.frame)  //创建地图的view
        self.view = mapView   //让百度地图的view成为控制器的view
        
        //设置定位精准度
        BMKLocationService.setLocationDesiredAccuracy(kCLLocationAccuracyBest)
        //指定最小距离更新,单位是米
        BMKLocationService.setLocationDistanceFilter(10)
        
        //初始化定位服务
        locService = BMKLocationService()
        //启动定位服务
        locService .startUserLocationService()
        
        mapView.showsUserLocation = false
        //设置位置跟踪态
        mapView.userTrackingMode = BMKUserTrackingModeNone
        //显示定位图层
        mapView.showsUserLocation = true
        //设置是否支持多点(缩放)
        mapView .zoomEnabled = true
        //手机比例尺中可以显示的级别  最高为19
        mapView .zoomLevel = 19
    }
    
    //定位代理
    //用户方向更改后
    func didUpdateUserHeading(userLocation: BMKUserLocation!) {
        mapView.updateLocationData(userLocation)
    }
    
    //位置更新后
    func didUpdateBMKUserLocation(userLocation: BMKUserLocation!) {
        mapView.updateLocationData(userLocation)
        //移动定位的位置到屏幕中间
        mapView .setCenterCoordinate(userLocation.location.coordinate, animated: true)
    }
    
    override func viewWillAppear(animated: Bool) {
        mapView.viewWillAppear()
        mapView.delegate = self   //在控制器view将要显示的时候设置mapview以及定位的Locservice的代理为控制器
        locService.delegate = self
    }
    
    override func viewWillDisappear(animated: Bool) {
        mapView.viewWillDisappear()
        mapView.delegate = nil    //在控制器view将要消失的时候设置mapview以及定位的locservice的代理为nil ,具体原因去查看百度地图的api,里面有说明
        locService.delegate = nil
    }

 

 5 代码写完之后,当你运行程序可能发现无法进行定位,那么这个有可能是你的plist文件少加入了一些东西,一起发上来;

  

ios swift 使用 oc 宏 oc调用swift库_百度地图_04

  这里二选一的,我选择的一直在后台运行,也可以选择另外一个属性,使用时候运行,至于key我不太记得了.自己在百度地图论坛可以找到.

 这里顺带说一下,在iOS9之后,苹果开启了ATS,这个服务其实是需要https支撑的,估计苹果的目的也就是反向逼迫开发者们增强自己的APP安全,但是有时候公司是不想花钱去买那个HTTPS的证书,毕竟国人都喜欢免费的,有http可以用,为什么要一年花一两千去买个证书呢?所以这里有一个方法关闭ATS,也是在plist文件里添加.如下;

ios swift 使用 oc 宏 oc调用swift库_百度地图_05

设置这个之后,一些AFN之类的第三方类库又可以正常使用了.

今天内容完毕..明天继续...