koogawa log

iOS、Android、foursquareに関する話題

【Tips】iOSで近接センサーを使う(Swift対応)

近接センサーとは

iPhone の上の方に付いているセンサーです。

f:id:koogawa:20131117133039p:plain

通話中、画面に顔が近付くと、近接センサーがそれを感知して画面をオフにしてくれます。これにより、通話中の誤操作を防ぐことができます。

実装方法

まずは近接センサーをオンにします。

Objective-C:

[UIDevice currentDevice].proximityMonitoringEnabled = YES;

Swift:

UIDevice.currentDevice().proximityMonitoringEnabled = true

次に、近接センサーを監視します。

近接センサーが反応すると、UIDeviceProximityStateDidChangeNotification が飛んでくるので、それを監視します。

Objective-C:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(proximitySensorStateDidChange:)
                                                 name:UIDeviceProximityStateDidChangeNotification
                                               object:nil];

Swift:

NSNotificationCenter.defaultCenter().addObserver(self,
    selector: "proximitySensorStateDidChange",
    name: UIDeviceProximityStateDidChangeNotification,
    object: nil)

通知が来た時に呼ばれるメソッドを定義します。

Objective-C:

- (void)proximitySensorStateDidChange:(NSNotification *)notification
{
    NSLog(@"%d", [UIDevice currentDevice].proximityState);
}

Swift:

func proximitySensorStateDidChange() {
    print("proximityState : \(UIDevice.currentDevice().proximityState)")
}

近接センサーが反応する(顔が近付く)と proximityState の値が YES になります。近接センサーから離れると NO になります。

サンプルコード

f:id:koogawa:20131117133103p:plain

注意点

  • proximityStateYES になる間、画面はロックされる(真っ黒になる)ようです
  • iPod touch など一部の機種には近接センサーが搭載されていません(T_T)

作れそうなアプリ

  • 腕立て伏せカウントアプリ
  • ナビアプリなどでポケットに入れたときに画面ロックするのに使えそう?
  • 画面に手をかざして何かするネタ系アプリ(波動拳の練習アプリとか)

参考リンク