50天iOS挑战(Swift) - 第3天:简单利用CoreLocation获取当前地址

50天iOS挑战(Swift) - 第3天:简单利用CoreLocation获取当前地址

50天,每天一个Swift语言的iOS练手项目,覆盖iOS开发的主要知识。贵在坚持,重在思考


文章列表:http://blog.csdn.net/b735098742/article/category/6978601
Github项目:https://github.com/Minecodecraft/50DaysOfSwift


简介

做一个利用CoreLocation获取当前地址的小demo,任务量较小,放松一下
主要知识点: CoreLocation

GIF

过程

1、 CoreLocation简介
CoreLocation是用于定位设备当前位置的框架,该框架可以利用蜂窝基站、WiFi、GPS等多种信息计算用户当前位置,同时该框架也可与包括MapKit在内的众多框架无缝共用,实现强大的基于位置的功能,在应用中使用频繁。
CoreLocation的使用主要CLLocationManager和CLLocationManagerDelegate两个核心类,前者提供定位、区域检测、方向等核心API,后者则处理前者的相关事件代理。

Tips 1. 定位权限的设置
iOS8起,程序获取定位权限需要显示调用requestWhenInUseAuthorization()或requestAlwaysAuthorization(),前者对应应用程序运行时才定位,后者对应始终定位,同时需要在Info.plist中设置"Privacy - Location When In Use Usage Description""Privacy - Location Always and When In Use Usage Description"。如果应用支持iOS 10及更早的系统,还要设置"Privacy - Location Always Usage Description"

Tips 2. 不同模式所支持的服务

服务 是否支持 是否支持
标准定位服务 支持 支持
重大变化的位置服务 不支持 支持
访问服务 不支持 支持
区域检测 不支持 支持
iBeacon范围 支持 支持
标题服务 支持 支持
地理编码服务 支持 支持

2、 界面实现
首先添加上述两个view,bkgView为背景,popupView为弹出窗口

        // 添加带透明度的背景视图,从而实现下方视图变暗
        guard let window = UIApplication.shared.keyWindow else { return }
        bkgView = UIView()
        bkgView.frame = window.bounds
        bkgView.backgroundColor = UIColor(white: 0.1, alpha: 0.6)
        window.addSubview(bkgView)

        // 添加弹出控件,添加到window而不是bkgView
        popupView = UIView()
        popupView.frame = CGRect(x: 30, y: kScreenHeight, width: kScreenWidth-60, height: 60)
        popupView.backgroundColor = UIColor.orange
        popupView.layer.cornerRadius = 15
        window.addSubview(popupView)

3、 动画实现
iOS简单动画实现起来很容易,通过UIView提交一个动画即可,采用尾随闭包来写。

        // 添加一个弹出动画
        UIView.animate(withDuration: 0.3) {
            // 尾随闭包播放弹出动画
            self.popupView.frame = CGRect(x: 30, y: (kScreenHeight-60)/2, width: kScreenWidth-60, height: 60)
        }
        // 收回动画
        UIView.animate(withDuration: 0.3) {
            // 尾随闭包播放弹出动画
            self.popupView.frame = CGRect(x: 30, y: kScreenHeight, width: kScreenWidth-60, height: 60)

            // 提交一个延时任务线程
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
                self.popupView.removeFromSuperview()
                self.bkgView.removeFromSuperview()
            }
        }

一点小小的补充
1. 项目源码地址 50DaysOfSwift,欢迎前来支持,随手留个Star。多谢~

猜你喜欢

转载自blog.csdn.net/b735098742/article/details/78314435