50天iOS挑戰(Swift) - 第3天:簡單利用CoreLocation獲取當前地址

50天iOS挑戰(Swift) - 第3天:簡單利用CoreLocation獲取當前地址

50天,每天一個Swift語言的iOS練手項目,覆蓋iOS開發的主要知識。貴在堅持,重在思考


文章列表:http://www.lxweimin.com/nb/13566182
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"

服務 是否支持 是否支持
標準定位服務 支持 支持
重大變化的位置服務 不支持 支持
訪問服務 不支持 支持
區域檢測 不支持 支持
iBeacon范圍 支持 支持
標題服務 支持 支持
地理編碼服務 支持 支持

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。多謝~
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容