残念なことに、このスワイプで戻るには、かなり意識して画面左端から右へスワイプしないと動作しないようです。知らないユーザも多いんじゃないでしょうか。もったいないなぁ。
iOS7でのNavigationControllerの実装
前述しましたが、iOS7対応アプリのNavigationControllerは標準でスワイプで戻る機能が実装されていると思われます。Apple標準アプリ以外でもスワイプで戻れたので、実装して確認してみました。
以下のような、単純なNavigationControllerでの画面遷移。
特に特別な実装なくして、左端からのスワイプで戻ることが可能でした。やはり標準でスワイプで戻る機能が実装されているようです。
標準のスワイプで戻る機能を無効にするには
自前でのジェスチャーを実装する場合、このデフォルト動作が邪魔になる場合があると思います。
以下のコードで、標準ジェスチャーを無効にすることが可能です。
スワイプを無効にしたいUIViewControllerにて、iOS7で追加になったNavigationControllerクラスのプロパティ interactivePopGestureRecognizerにて操作をします。
iOS7のみで提供されているプロパティなので、実装判定を行ってから無効にしています。
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
//実装されている場合(iOS7)
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
以下、実装例。
//実装されている場合(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;
}
とても便利だけど、はたしてどの位のユーザがこの機能を意識して使用出来ているのでしょうか。
//実装されている場合(iOS7)
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
}
0 件のコメント :
コメントを投稿