#iOSで近接センサーをいじってみる
iPhoneに搭載されている近接センサーを使って、手をかざしたことを検知したいと思って調べたことをまとめました。
#対応機種について
近接センサーはiPhoneについているセンサーでiPad やiPod touchにはついていないようです。
#とりあえず、使ってみる
UIDevice でproximitySensorを有効にします。
その後、NSNotificationCenterにObserverを追加します。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
UIDevice.currentDevice().proximityMonitoringEnabled = true
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.proxitySensorStateChanged), name: UIDeviceProximityStateDidChangeNotification, object: nil)
}
近接センサーが反応したとき、下記のメソッドが呼ばれるようにしました。
storyboard上のラベルの色が変化するだけです。
func proxitySensorStateChanged(){
if (UIDevice.currentDevice().proximityState == true)
{
self.proximitySensor.backgroundColor = UIColor.greenColor()
}
else
{
self.proximitySensor.backgroundColor = UIColor.redColor()
}
}
とりあえずこれだけで近接センサーは使えるようになりました。
#画面がブラックアウトする
手をかざしてから1秒ほどすると、画面がブラックアウトしました。
通話時の誤操作を避けるための機能みたいで、今のところ公開されてるAPIでどうにもできなさそう。
Stack Overflow : Keep display on when the proximity sensor is covered
ちなみに、試しに画面がブラックアウトしてる状態でNSTimerを使ってみたら動いていたので、画面が消えているだけみたい。
#メソッドは値が変わった時しか呼ばれない
当たり前かもしれないですが、近接センサーはBool値で制御される(距離は計れない)ため通知センターからは値が変わった時しかメソッドが呼ばれません。
手をかざしている時間などを知りたい場合は、タイマーなどを併用する必要がありそうです。
#まとめ
近接センサーの使い方がわかりました。
今後、アプリに活かしたいと思います。