Swiftで近接センサーを実装する


はじめに

この記事はCyberAgent 22 新卒 Advent Calendar 2021の22日目の記事です

Swiftで近接センサーを実装するにあたって調べたところ、かなり古い記事しかなかったためまとめてみます。
近接センサーというのは通話の際などにiPhone上部のセンサーに近づくことで一時的にスリープ状態にする実装を指しています。

実装

コードの全容は以下のようになります。

ViewController.swift
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        UIDevice.current.isProximityMonitoringEnabled = true
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        UIDevice.current.isProximityMonitoringEnabled = false
    }

これだけのコードで近接センサーを実装することができます。

近接センサーを有効にしたい画面のviewWillAppear内でviewが表示される直前にセンサーを有効にし、viewWillDisappearでviewが表示されなくなる直前にセンサーを無効にすることで他画面でセンサーが反応し、スリープしてしまわないようにしています
全画面で近接センサーを有効したい場合はviewDidLoad内へ記述のみで大丈夫です。

センサーによってUIを変化させるなどのカスタマイズを行いたい場合は、viewDidAppearに以下のようなコードを追加します。

ViewController.swift
NotificationCenter.default.addObserver(self, selector: #selector(proximitySensorState), name: UIDevice.proximityStateDidChangeNotification, object: nil)

@objc func proximitySensorState() {
    if UIDevice.current.proximityState == true {
        print("センサーに近づいた")
    } else{
        print("センサーから離れた")
    }
}

UIDevice.current.proximityStateを取得することでセンサーの状態によって処理を変えることができます。