7. Swift 센서

7. Swift 센서
반드시 실제 기기에서 테스트를 해야만 데이터를 얻을 수 있다
class ViewController: UIViewController,CLLocationManagerDelegate {

    private var cmm:CMMotionManager!
    private var queue:NSOperationQueue!
    //     
    private var lm:CLLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.cmm = CMMotionManager()
        self.queue = NSOperationQueue()
        self.lm = CLLocationManager()
        self.lm.delegate = self
    }

    func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading){
        NSLog("\(newHeading)")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    //         
    private func startAccelerometerUpdatesToQueue(){
        self.cmm.accelerometerUpdateInterval = 1
        if(self.cmm.accelerometerAvailable && !self.cmm.accelerometerActive){
            self.cmm.startAccelerometerUpdatesToQueue(queue, withHandler: {
                (data:CMAccelerometerData?, err:NSError?) in
                NSLog("\(data)")
            })
        }else{
            NSLog("         ")
        }
    }

    //         
    private func startGyroUpdatesToQueue(){
        self.cmm.gyroUpdateInterval = 1;
        if(self.cmm.gyroAvailable && !self.cmm.gyroActive){
            self.cmm.startGyroUpdatesToQueue(queue, withHandler: {
                (data:CMGyroData?, err:NSError?) in
                NSLog("\(data)")
            })
        }else{
            NSLog("         ")
        }
    }

    //        
    private func startListenerProximity(){
        UIDevice.currentDevice().proximityMonitoringEnabled = true
        NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("proximityChanged"), name: UIDeviceProximityStateDidChangeNotification, object: nil)
    }

    //        
    private func startListenerBatteryLevel(){
        UIDevice.currentDevice().batteryMonitoringEnabled = true
        NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("batteryLevelChanged"), name: UIDeviceBatteryLevelDidChangeNotification, object: nil)
    }


    //         
    private func proximityChanged(){
        NSLog("\(UIDevice.currentDevice().proximityState)")
    }

    //         
    private func batteryLevelChanged(){
        NSLog("\(UIDevice.currentDevice().batteryLevel)")
    }


    //        
    private func stopListenerBatteryLevel(){
        NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceBatteryLevelDidChangeNotification, object: nil)
    }

    //        
    private func stopListenerProximity(){
        NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceProximityStateDidChangeNotification, object: nil)
    }

    //         
    private func stopAccelerometerUpdates(){
        if(self.cmm.accelerometerAvailable){
            self.cmm.stopAccelerometerUpdates()
        }
    }

    //         
    private func stopGyroUpdates(){
        if(self.cmm.gyroAvailable){
            self.cmm.stopGyroUpdates()
        }
    }

    // ViewController     
    override func viewWillAppear(animated: Bool) {
        self.startAccelerometerUpdatesToQueue()
        self.startGyroUpdatesToQueue()
        self.startListenerProximity()
        self.startListenerBatteryLevel()
        //        
        self.lm.startUpdatingHeading()
    }

    // ViewController     
    override func viewWillDisappear(animated: Bool) {
        self.stopAccelerometerUpdates()
        self.stopGyroUpdates()
        self.stopListenerProximity()
        self.stopListenerBatteryLevel()
    }

}

좋은 웹페이지 즐겨찾기