• 地图定位


    import UIKit

    import CoreLocation

     

    class ViewController: UIViewController {

     

        

        // 如果是ios8.0以后, 在想请求用户的位置信息, 需要主动的请求授权, 系统不会再自动弹出一个窗口

        

        

        lazy var locationM: CLLocationManager = {

           let locationM = CLLocationManager()

            locationM.delegate = self

            

            

            // 请求的是前台定位授权

            // 默认情况, 只能在前台获取用户位置信息 如果想想要在后台也获取用户位 那么必须勾选后台模式location  updates

     

            // 效果 在后台确实可以获取到位置信息, 但是屏幕上方会出现一个蓝色的横幅, 不断提醒用户, 当前APP 正在使用你的位置

            if #available(iOS 8.0, *) {

                locationM.requestWhenInUseAuthorization()

                

                

                // 如果在ios9.0以后, 想要在后台获取用户位置

                // 如果当前的授权状态是前台定位授权, 那么你需要勾选后台模式 location updates, 还要额外的设置以下属性为true

                // 注意: 如果设置这个属性为true, 那么必须勾选后台模式

                if #available(iOS 9.0, *) {

                    locationM.allowsBackgroundLocationUpdates = true

                }

                

                // 前后台定位授权

                // 如果当前的授权状态是前后台定位授权, 那么默认情况下, 就可以在后台获取用户位置信息, 不需要勾选后台模式location updates

                

    //            locationM.requestAlwaysAuthorization()

            }

            

            

          

            

            

            

            return locationM

            

            

        }()

        

        

        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

            locationM.startUpdatingLocation()

        }

     

    }

     

     

    extension ViewController: CLLocationManagerDelegate {

        

        

        func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

            print("已经获取到位置信息")

        }

        

        /**

         授权状态发生改变时调用

         

         - parameter manager: 位置管理者

         - parameter status:  状态

         */

        func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {

            switch status {

            case .NotDetermined:

                print("用户没有决定")

            case .Restricted:

                print("受限制")

            case .AuthorizedWhenInUse:

                print("前台定位授权")

            case .AuthorizedAlways:

                print("前后台定位授权")

            case .Denied:

    //            print("拒绝")

                // 判断当前设备是否支持定位, 并且定位服务是否开启

                if CLLocationManager.locationServicesEnabled() {

                    print("真正被拒绝")

                    // 手动通过代码, 来跳转到设置界面

                    if #available(iOS 8.0, *) {

                        

                        let url = NSURL(string: UIApplicationOpenSettingsURLString)

                        if UIApplication.sharedApplication().canOpenURL(url!) {

                            UIApplication.sharedApplication().openURL(url!)

                        }

                    }

                   

                }else {

                    // 当我们在app内部想要访问用户位置, 但是当前的定位服务是关闭状态, 那么系统会自动弹出一个窗口, 快捷跳转到设置界面, 让用户设置

                    print("定位服务应该打开")

                }

            default:

                print("none")

            }

        }

        

        

        

    }

  • 相关阅读:
    pt-online-schema-change使用
    MySQL8.0哪些新特性你最期待
    第11章:使用Python打造MySQL专家系统
    第10章:深入浅出Ansible
    第9章:Python自动化管理
    第8章:网络
    自己在Java学习中遇到的一些遗漏小知识点
    Java语言程序设计与数据结构(梁勇版) 基础版 课后习题 第三章
    Java多态小知识
    Java继承与抽象类小知识以及super,this关键字用法
  • 原文地址:https://www.cnblogs.com/liuzhenjie/p/5396694.html
Copyright © 2020-2023  润新知