iOS获取当前位置(基于Swift)
2015-07-03 16:22
169 查看
本人也是才开始学习ios,最近刚好在一边写应用一边学语言(swift),遇到需要获取当前位置,所以就在网上找了些代码!这里写出来,一是方便自己学习,二呢也为学习的新人提供点参考;
工程的建立就不说了 ,我们直接从代码开始:
首先我们得在info.plist文件中添加定位需要的属性:
1:LocationWhenInUseUsageDescription
2:NSLocationAlwaysUsageDescription
属性添加了,我们就可以在代码中操作了。
一般来说需要定位都是在app启动的时候,所以我在viewcontroller.swift中进行定位的代码编写,当然你的不一定。
好了,我们开始说代码:
首先我们继承
CLLocationManagerDelegate
我们需要的一些方法都在这里面
接着实例化:
let locationmananger = CLLocationManager();
这样我们就可以用locationmananger取我们需要的方法;
现在我们在
func viewDidLoad()
中开启定位功能,定位方式选择最好的
locationmananger.desiredAccuracy = kCLLocationAccuracyBest;
直接在当前文件中直接重载方法
locationmananger.delegate = self
在这需要判断ios的操作系统,苹果在ios8之后的定位增加了方法,我们需要添加它,才能在ios8之后的系统使用定位功能
func ios8() -> Bool{
return UIDevice.currentDevice().systemVersion == "8.4";
}
这里我只做了一个简单的判断,因为的的模拟器是8.4的,所以我只需要判断等于8.4就行了,在做应用的时候判断大于8.0就可以
判断系统后输入以下代码
if(ios8()){
//始终允许访问位置信息
locationmananger.requestAlwaysAuthorization();
//使用应用程序期间允许访问位置数据
locationmananger.requestWhenInUseAuthorization();
}
这样就可以在ios8以后使用定位了
任何开启定位
locationmananger.startUpdatingLocation();
viewDidLoad()的代码
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
locationmananger.delegate = self;
//定位方式
locationmananger.desiredAccuracy = kCLLocationAccuracyBest;
if(ios8()){
//始终允许访问位置信息
locationmananger.requestAlwaysAuthorization();
//使用应用程序期间允许访问位置数据
locationmananger.requestWhenInUseAuthorization();
}
//开启定位
locationmananger.startUpdatingLocation();
}
开启定位之后,我们需要获取当前的经纬度已经错误信息,所以我们要用到两个方法:
定位刷新
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!)
定位错误信息
func locationManager(manager: CLLocationManager!, didFinishDeferredUpdatesWithError error: NSError!)
获取经纬度:
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
//取得locations数组的最后一个
var location:CLLocation = locations[locations.count-1] as! CLLocation
//判断是否为空
if(location.horizontalAccuracy>0){
println(location.coordinate.latitude);
println(location.coordinate.longitude);
var lat = location.coordinate.latitude;
//停止定位
locationmananger.stopUpdatingLocation();
}
}
因为这里获取的位置信息肯定不止一个,所以我们只需要去数组的最后组信息即可
locations[locations.count-1]然后就是获取经纬度了
错误信息我这里是直接打印,你们需要根据错误做相关的操作,也在这里
func locationManager(manager: CLLocationManager!, didFinishDeferredUpdatesWithError error: NSError!) {
println(error);
}
现在我们可以调试了
由于我也是才开始学习ios,很多地方不懂,哪里写的有问题的,还请提出来,让我学习
工程的建立就不说了 ,我们直接从代码开始:
首先我们得在info.plist文件中添加定位需要的属性:
1:LocationWhenInUseUsageDescription
2:NSLocationAlwaysUsageDescription
属性添加了,我们就可以在代码中操作了。
一般来说需要定位都是在app启动的时候,所以我在viewcontroller.swift中进行定位的代码编写,当然你的不一定。
好了,我们开始说代码:
首先我们继承
CLLocationManagerDelegate
我们需要的一些方法都在这里面
接着实例化:
let locationmananger = CLLocationManager();
这样我们就可以用locationmananger取我们需要的方法;
现在我们在
func viewDidLoad()
中开启定位功能,定位方式选择最好的
locationmananger.desiredAccuracy = kCLLocationAccuracyBest;
直接在当前文件中直接重载方法
locationmananger.delegate = self
在这需要判断ios的操作系统,苹果在ios8之后的定位增加了方法,我们需要添加它,才能在ios8之后的系统使用定位功能
func ios8() -> Bool{
return UIDevice.currentDevice().systemVersion == "8.4";
}
这里我只做了一个简单的判断,因为的的模拟器是8.4的,所以我只需要判断等于8.4就行了,在做应用的时候判断大于8.0就可以
判断系统后输入以下代码
if(ios8()){
//始终允许访问位置信息
locationmananger.requestAlwaysAuthorization();
//使用应用程序期间允许访问位置数据
locationmananger.requestWhenInUseAuthorization();
}
这样就可以在ios8以后使用定位了
任何开启定位
locationmananger.startUpdatingLocation();
viewDidLoad()的代码
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
locationmananger.delegate = self;
//定位方式
locationmananger.desiredAccuracy = kCLLocationAccuracyBest;
if(ios8()){
//始终允许访问位置信息
locationmananger.requestAlwaysAuthorization();
//使用应用程序期间允许访问位置数据
locationmananger.requestWhenInUseAuthorization();
}
//开启定位
locationmananger.startUpdatingLocation();
}
开启定位之后,我们需要获取当前的经纬度已经错误信息,所以我们要用到两个方法:
定位刷新
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!)
定位错误信息
func locationManager(manager: CLLocationManager!, didFinishDeferredUpdatesWithError error: NSError!)
获取经纬度:
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
//取得locations数组的最后一个
var location:CLLocation = locations[locations.count-1] as! CLLocation
//判断是否为空
if(location.horizontalAccuracy>0){
println(location.coordinate.latitude);
println(location.coordinate.longitude);
var lat = location.coordinate.latitude;
//停止定位
locationmananger.stopUpdatingLocation();
}
}
因为这里获取的位置信息肯定不止一个,所以我们只需要去数组的最后组信息即可
locations[locations.count-1]然后就是获取经纬度了
错误信息我这里是直接打印,你们需要根据错误做相关的操作,也在这里
func locationManager(manager: CLLocationManager!, didFinishDeferredUpdatesWithError error: NSError!) {
println(error);
}
现在我们可以调试了
由于我也是才开始学习ios,很多地方不懂,哪里写的有问题的,还请提出来,让我学习
相关文章推荐
- IOS Swift学习之函数
- swift c++ oc 混编
- Swift基础语法学习总结
- IOS Swift学习之控制流
- Swift教程之运算符重载
- Swift : missing argument label 'xxx' in call
- Swift: missing argument label 'xxx' in call
- Swift 闭包(六)
- Swift “ambiguous use of operator '>'”
- swift 之嵌套的理解 func chooseStepFunction(backwards: Bool) -> (Int) -> Int
- 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
- 苹果新的编程语言 Swift 语言进阶(六)--函数和闭包
- Swift 枚举(七)
- SWIFT推送之本地推送(UILocalNotification)之二带按钮的消息
- Swift下调用Touch ID实现指纹识别
- Swift初体验(两)
- swift 之 模仿block 界面传值
- Swift 字典
- Swift基础学习(1)
- IOS Swift 学习之字符串与字符