Proximity sensor in Swift (from Objective-C)

前端 未结 5 896
死守一世寂寞
死守一世寂寞 2021-02-14 18:45

I\'m a relatively new user to swift and now, I need to take advantage of the proximity sensor of an iPhone. I don\'t matter the distance, but I want to know when something is ne

相关标签:
5条回答
  • 2021-02-14 18:48

    Swift 4

    //MARK:- Sensor deduct when hide and show the screen when call
    func activateProximitySensor() {
        let device = UIDevice.current
        device.isProximityMonitoringEnabled = true
        if device.isProximityMonitoringEnabled {
            NotificationCenter.default.addObserver(self, selector: #selector(proximityChanged(notification:)), name: NSNotification.Name(rawValue: "UIDeviceProximityStateDidChangeNotification"), object: device)
        }
    }
    
    @objc func proximityChanged(notification: NSNotification) {
        if let device = notification.object as? UIDevice {
            print("\(device) detected!")
        }
    }
    

    For Removing Observer

     NotificationCenter.default.removeObserver(self, name: .UIDeviceProximityStateDidChange, object: nil)
    
    0 讨论(0)
  • 2021-02-14 18:52

    Swift 3 Version

    (Based on Eric Aya's answer)

    func setProximitySensorEnabled(_ enabled: Bool) {
        let device = UIDevice.current
        device.isProximityMonitoringEnabled = enabled
        if device.isProximityMonitoringEnabled {
            NotificationCenter.default.addObserver(self, selector: #selector(proximityChanged), name: .UIDeviceProximityStateDidChange, object: device)
        } else {
            NotificationCenter.default.removeObserver(self, name: .UIDeviceProximityStateDidChange, object: nil)
        }
    }
    
    func proximityChanged(_ notification: Notification) {
        if let device = notification.object as? UIDevice {
            print("\(device) detected!")
        }
    }
    
    0 讨论(0)
  • 2021-02-14 19:04

    Finally I get it working with the answer of Eric D.

    Here is the code:

    func proximityChanged(notification: NSNotification) {
      if let device = notification.object as? UIDevice {
        println("\(device) detected!")
      }
    }
            
    func activateProximitySensor() {
      let device = UIDevice.currentDevice()
      device.proximityMonitoringEnabled = true
      if device.proximityMonitoringEnabled {
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "proximityChanged:", name: "UIDeviceProximityStateDidChangeNotification", object: device)
        }
      }
    }
    

    and in the viewDidLoad:

    override func viewDidLoad() {
      super.viewDidLoad()
      activateProximitySensor()
    }
    

    Hope it helps!

    0 讨论(0)
  • 2021-02-14 19:10

    Swift 4.2

    Activate or deactivate ProximitySensor:

    func activateProximitySensor(isOn: Bool) {
        let device = UIDevice.current
        device.isProximityMonitoringEnabled = isOn
        if isOn {
            NotificationCenter.default.addObserver(self, selector: #selector(proximityStateDidChange), name: UIDevice.proximityStateDidChangeNotification, object: device)
        } else {
            NotificationCenter.default.removeObserver(self, name: UIDevice.proximityStateDidChangeNotification, object: device)
        }
    }
    

    Selector:

    @objc func proximityStateDidChange(notification: NSNotification) {
        if let device = notification.object as? UIDevice {
            print(device)
        }
    }
    
    0 讨论(0)
  • 2021-02-14 19:11

    Here's my take on this.

    func activateProximitySensor() {
        let device = UIDevice.currentDevice()
        device.proximityMonitoringEnabled = true
        if device.proximityMonitoringEnabled {
            NSNotificationCenter.defaultCenter().addObserver(self, selector: "proximityChanged:", name: "UIDeviceProximityStateDidChangeNotification", object: device)
        }
    }
    
    func proximityChanged(notification: NSNotification) {
        if let device = notification.object as? UIDevice {
            println("\(device) detected!")
        }
    }
    
    0 讨论(0)
提交回复
热议问题