【30-swift-projects-in-30-days】swift 5 学习 03.Find My Position

【30-swift-projects-in-30-days】Swift 5 学习记录

在 03.Find My Position 项目中主要学习的是CLLocation定位。CoreLocation框架可用于定位设备当前经纬度,通过该框架,应用程序可通过附近的蜂窝基站,WIFI信号或者GPS等信息计算用户位置。

1.获取位置信息

(1)创建CLLocationManager对象,该对象负责获取定位相关信息。并为该对象设置一些必要的属性。

(2)为CLLocationManager指定delegate属性,该属性值必须是一个实现CLLocationManagerDelegate协议的对象。实现CLLocationManagerDelegate协议时可根据需要实现协议中特定的方法。

(3)调用CLLocationManager的startUpdatingLocation方法获取定位信息。定位结束时,可调用stopUpdatingLocation方法结束获取定位信息。

 

第一步:在CoreLocation.framework添加到项目中去

第二步:在iOS8中需要在info.plist中添加NSLocationAlwaysAndWhenInUseUsageDescription 及 NSLocationWhenInUseUsageDescriptio两个字段。

c4d768d7a972e6249a40ad0e67f0dc3bbab.jpg

不配置这两个字段会报如下错误:

FindMyPosition[10463:217697] This app has attempted to access 
privacy-sensitive data without a usage description. 
The app's Info.plist must contain 
both “NSLocationAlwaysAndWhenInUseUsageDescription” 
and “NSLocationWhenInUseUsageDescription” keys with 
string values explaining to the user how the app uses this data

另外,在模拟器上获取地址位置时,会提示“Error Domain=kCLErrorDomain Code=8”错误,但是使用真机就会正常。

2.view的frame和bounds之区别(位置和大小)

在项目中看到如下代码:

findMyLocationBtn.frame = CGRect(x: 50, y: self.view.bounds.height - 80, width: self.view.bounds.width - 100, height: 50)

其中有self.view.bounds.width,联想到在02.Watch'sDemo中使用过self.view.frame.width,探究了一下两者的区别。如下:

frame定义了一个view相对于父视图坐标系的位置和大小,它会影响center属性和bounds属性的size。

这里需要做个特殊说明,frame的坐标是相对于父视图坐标系的,所以在设置的时候需要明白,父视图是什么,一个View的父视图就是这个view被谁addSubview了。如果view1. addSubview(view2) view2. addSubview(view3) 那么view3的父视图就是view2,而不是view1

Bounds也是描述的是视图的位置和大小,只不过是在自己的坐标系上。也就是说它描述的是当前视图相对于自身坐标系的位置和大小。

简而言之,就是frame和bounds的width和height是一样的,唯独坐标是不一样,frame的坐标是相对于父视图的,bounds是相对于自己的。

 

学习源码来自 https://github.com/nimomeng/30-swift-projects-in-30-days ,其Swift语言版本为 4.1 。

学习过程我会将代码语言版本改成Swift 5,代码地址:https://github.com/dong706/30-swift-projects-in-30-days/ 。

 

参考文章:iOS布局』frame与bounds

转载于:https://my.oschina.net/dong706/blog/3049100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值