近接センサーとは
iPhone の上の方に付いているセンサーです。
通話中、画面に顔が近付くと、近接センサーがそれを感知して画面をオフにしてくれます。これにより、通話中の誤操作を防ぐことができます。
実装方法
まずは近接センサーをオンにします。
[UIDevice currentDevice].proximityMonitoringEnabled = YES;
Swift:
UIDevice.currentDevice().proximityMonitoringEnabled = true
次に、近接センサーを監視します。
近接センサーが反応すると、UIDeviceProximityStateDidChangeNotification
が飛んでくるので、それを監視します。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximitySensorStateDidChange:) name:UIDeviceProximityStateDidChangeNotification object:nil];
Swift:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "proximitySensorStateDidChange", name: UIDeviceProximityStateDidChangeNotification, object: nil)
通知が来た時に呼ばれるメソッドを定義します。
- (void)proximitySensorStateDidChange:(NSNotification *)notification { NSLog(@"%d", [UIDevice currentDevice].proximityState); }
Swift:
func proximitySensorStateDidChange() { print("proximityState : \(UIDevice.currentDevice().proximityState)") }
近接センサーが反応する(顔が近付く)と proximityState
の値が YES
になります。近接センサーから離れると NO
になります。
サンプルコード
- iSensor/ProximityViewController.m at master · koogawa/iSensor · GitHub
iSensorSwift/ProximityViewController.swift at master · koogawa/iSensorSwift · GitHub
注意点
proximityState
がYES
になる間、画面はロックされる(真っ黒になる)ようです- iPod touch など一部の機種には近接センサーが搭載されていません(T_T)
作れそうなアプリ
- 腕立て伏せカウントアプリ
- ナビアプリなどでポケットに入れたときに画面ロックするのに使えそう?
- 画面に手をかざして何かするネタ系アプリ(波動拳の練習アプリとか)