iOSアプリ開発

2013年10月16日水曜日

iOS7 NavigationControllerには標準でスワイプで戻る機能が実装されている(メールアプリ、メッセージアプリ等の便利技)

 iOS7になってApple標準アプリのメール、メッセージ、設定等がスワイプ(左端→右)で戻れるようになっています。 スワイプで戻れるようになって、左上のNavigationItemボタンに指が届きにくいと思っていた方にはかなり便利な機能実装だと思います。 私自身、左上ボタンは押しづらいといつも思っていたので、この標準機能はかなり嬉しいです。
 残念なことに、このスワイプで戻るには、かなり意識して画面左端から右へスワイプしないと動作しないようです。知らないユーザも多いんじゃないでしょうか。もったいないなぁ。
iOS7でのNavigationControllerの実装
 前述しましたが、iOS7対応アプリのNavigationControllerは標準でスワイプで戻る機能が実装されていると思われます。Apple標準アプリ以外でもスワイプで戻れたので、実装して確認してみました。
以下のような、単純なNavigationControllerでの画面遷移。
 特に特別な実装なくして、左端からのスワイプで戻ることが可能でした。やはり標準でスワイプで戻る機能が実装されているようです。
標準のスワイプで戻る機能を無効にするには
 自前でのジェスチャーを実装する場合、このデフォルト動作が邪魔になる場合があると思います。 以下のコードで、標準ジェスチャーを無効にすることが可能です。 スワイプを無効にしたいUIViewControllerにて、iOS7で追加になったNavigationControllerクラスのプロパティ interactivePopGestureRecognizerにて操作をします。 iOS7のみで提供されているプロパティなので、実装判定を行ってから無効にしています。
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    //実装されている場合(iOS7)
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
以下、実装例。
- (void)viewDidLoad
{
    [super viewDidLoad];
 // Do any additional setup after loading the view.

    //interractivePopGestureRecognizer プロパティが実装されているか判定
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        //実装されている場合(iOS7)
        self.navigationController.interactivePopGestureRecognizer.enabled = NO;
    }
}
標準のスワイプで戻る機能をカスタムするには
 戻る動作をカスタムするにはUIGestureRecognizerDelegateを実装したオブジェクトを設定してあげるだけです。 以下例は自クラスでUIGestureRecognizerDelegateを実装している場合の例になります。
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    //実装されている場合(iOS7)
    self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
}
とても便利だけど、はたしてどの位のユーザがこの機能を意識して使用出来ているのでしょうか。

0 件のコメント:

コメントを投稿