iOS7 is ready.

iOS7リリースということで、新しいクラスでも紹介してみる。

 

そう、それは、ジェスチャの新顔。

 

UIScreenEdgePanGestureRecognizer

 

名前の通り、デバイスのエッジからのドラッグを検知してくれるクラス。

プロパティに edges というのがあるので、ここに検知したいデバイスの方向を指定。

具体的には、これまたOS7から加わった以下の列挙型から選ぶ。

 

typedef NS_OPTIONS(NSUInteger, UIRectEdge) {
    UIRectEdgeNone   = 0,
    UIRectEdgeTop    = 1 << 0,
    UIRectEdgeLeft   = 1 << 1,
    UIRectEdgeBottom = 1 << 2,
    UIRectEdgeRight  = 1 << 3,
    UIRectEdgeAll    = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight
} NS_ENUM_AVAILABLE_IOS(7_0);

 

ばっちり、上下左右が網羅されている模様。

リファレンスにもあるように、このプロパティは相対的なものなので

アプリのオリエンテーションによって適切に方向を判定してくれる(縦で左なら、横でも左。下とか上にはならない)。

 

上下左右が指定可能ではあるものの、スクリーンの上と下のジェスチャには

それぞれノーティフィケーションセンターとコントロールセンターが割り当てられているので

実質的に使えるのは左と右くらいだったりはする(コントロールセンターは設定でオフにできるので、そうすれば下からのジェスチャは検知できる。上は……どうしようもない)。

 

なお、動作確認は実機でないと無理くさい。

3.5inch のシミュレータには一応エッジがあるので、いけるかと思ったけどダメだった。

 

実装したところで、気づかれない可能性もなくはないけれど

ジェスチャが足りないと感じたら使ってみるとよろしい。

 

で、OS7のナビゲーションコントローラが早速このジェスチャを取り込んでいたり。

これまでは左上のボタンをタップして戻るしかなかったけど、左エッジからのドラッグでも戻れるようになってる。

スクリーンが大きくなって、片手では上にあるボタンが押しにくかった不満がこれで解消。

やったね!

 

……でも、これに気づく人がどれだけいるのやら。