参考demo:http://download.csdn.net/download/klkxxy/10049133
1.在使用定位时需要配置plist文件,否则可能发生错误,在文件中新增以下属性用于用户在使用该应用是授权定位,但是该设置也可以调用CLLocatoinManager的方法实现
NSLocationWhenInUseUsageDescription//打开应用是开启定位
NSLocationAlwaysUsageDescription//一直开启定位
2.除了需要配置plist文件(有时没有导入也可以定位),还需要导入CoreLocation的framework如下图:
3.在使用的swift文件的开始导入头文件->" import CoreLocation"
4.在进行实际开发时,获取定位,可以使用NSlock,运行时不受打扰。
5.扩展
CLLocation类:主要存储定位后的信息( coordinate.longitude:经度 coordinate.latitude:纬度
altitude:高度)
6.扩展学习参考:使用swift构建带有地理定位功能的APP
7.如果定位失败原因,
请检查a.调试定位功能没有开启。解决:模拟器的Debug->Location是否打开(即不选None)
b.应用地理位置访问权限不够。 解决:初次使用应用先回到模拟器首页(Shift+COM+H),进入设置->privacy->Location Services->下面的应用列表的该应用是否选择Always.
c.还有可能是自定义经纬度不符合(error:kCLErrorDomain的错误,当然得调用协议中的定位失败返回错误方法))
三.使用主要步骤
1.配置好相关,导入头文件,控制器遵守CLLocationManagerDelegate委任代理
2.生成CLLocationMananger的对象
3.设置CLLocation属性和某些方法的调用
4.实现CLLocationDelegate的方法回掉,didUpdateLocations获取定位信息或者错误信息
四.代码参考
-
import UIKit
-
import CoreLocation
-
-
class ViewController: UIViewController ,CLLocationManagerDelegate{
-
-
let locationManager = CLLocationManager()
-
var currentLocation:CLLocation!
-
var lock = NSLock()
-
-
override func viewDidLoad() {
-
super.viewDidLoad()
-
locationManager.delegate = self
-
locationManager.desiredAccuracy = kCLLocationAccuracyBest //定位精确度(最高)一般有电源接入,比较耗电
-
//kCLLocationAccuracyNearestTenMeters;//精确到10米
-
locationManager.distanceFilter = 50 //设备移动后获得定位的最小距离(适合用来采集运动的定位)
-
locationManager.requestWhenInUseAuthorization()//弹出用户授权对话框,使用程序期间授权(ios8后)
-
//requestAlwaysAuthorization;//始终授权
-
locationManager.startUpdatingLocation()
-
print("开始定位》》》")
-
-
}
-
-
override func didReceiveMemoryWarning() {
-
super.didReceiveMemoryWarning()
-
// Dispose of any resources that can be recreated.
-
}
-
-
/**
-
* CLlocationDelegate
-
*/
-
//委托传回定位,获取最后一个
-
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
-
lock.lock()
-
currentLocation = locations.last //注意:获取集合中最后一个位置
-
print("定位经纬度为:\(currentLocation.coordinate.latitude)")
-
//一直发生定位错误输出结果为0:原因是我输出的是currentLocation.altitude(表示高度的)而不是currentLoction.coordinate.latitude(这个才是纬度)
-
print(currentLocation.coordinate.longitude)
-
lock.unlock()
-
-
}
-
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
-
print("定位出错拉!!\(error)")
-
}
-
-
}
|
请发表评论