iOSサイドスリップ禁止ジェスチャーの要点解析
プロジェクトによっては、いくつかのページでボタンを返すにはユーザー定義が必要かもしれません。戻るボタンをクリックして、ある判断を下すか、またはコントローラに直接popを与える場合、横滑りを無効にしてジェスチャーに戻る必要があります。判断されたコードが元のインターフェースに戻らないようにしてください。
インターネットでいくつかの資料を探しましたが、大体の方法は二つありますが、注意すべき点は言及されていません。間違いやすいです。ここで整理してください。
需要:A->B->>C、Bページに横滑りを禁止するように要求します。
1.BプッシュからCまで、Cページは横滑りして戻ります。
2.B popはAに戻り、AプッシュDから、Dは横滑りで戻ってきます。
方法1:
Bページのライフサイクルは以下のコードに設定されています。
1、view DidApparでナビゲーションを無効にしている横滑りのジェスチャーです。view Willapearには設定しないでください。
view Willapearでジェスチャーを無効にしたら、B->Cを発見した後、Cインターフェースの横滑りで戻った時、APPは仮死状態になります。なぜなら、Bインターフェースが現れそうな時、サイドスリップジェスチャーを無効にして、Cサイドスリップの失敗を招き、インターフェースが詰まります。ですから、Bインターフェースに現れたら、横スライドのジェスチャーを無効にします。
2、view WillDisplaarでナビゲーションの横滑りをアクティブにしたいです。view DidDisplaarではありません。
ナビゲーションは共用です。アクティブでないと返ってきます。他のページも横滑りして戻りません。view DidDiscapear設定のアクティブ化は無効です。ページが消える前にアクティブにします。
方法二:
Bページのライフサイクルにも下記のコードが設定されています。方法の1つは、サイドスリップジェスチャーを直接オフし、アクティブにすることであり、方法の2つは、BがプロトコルUGesture Recognizer Delegateに従い、サイドスリップインタラクティブエージェントを設定し、ジェスチャー方法を書き換えることである。
私たちはUITNavigationControllerベースをカスタマイズすることがあります。中にはサイドスリップジェスチャーの代理店が設置されているかもしれません。ですから、Bインターフェースが現れたら、改めて代理をBに設定します。消える前に、代理を元に戻します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
インターネットでいくつかの資料を探しましたが、大体の方法は二つありますが、注意すべき点は言及されていません。間違いやすいです。ここで整理してください。
需要:A->B->>C、Bページに横滑りを禁止するように要求します。
1.BプッシュからCまで、Cページは横滑りして戻ります。
2.B popはAに戻り、AプッシュDから、Dは横滑りで戻ってきます。
方法1:
Bページのライフサイクルは以下のコードに設定されています。
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
};
}
注意:1、view DidApparでナビゲーションを無効にしている横滑りのジェスチャーです。view Willapearには設定しないでください。
view Willapearでジェスチャーを無効にしたら、B->Cを発見した後、Cインターフェースの横滑りで戻った時、APPは仮死状態になります。なぜなら、Bインターフェースが現れそうな時、サイドスリップジェスチャーを無効にして、Cサイドスリップの失敗を招き、インターフェースが詰まります。ですから、Bインターフェースに現れたら、横スライドのジェスチャーを無効にします。
2、view WillDisplaarでナビゲーションの横滑りをアクティブにしたいです。view DidDisplaarではありません。
ナビゲーションは共用です。アクティブでないと返ってきます。他のページも横滑りして戻りません。view DidDiscapear設定のアクティブ化は無効です。ページが消える前にアクティブにします。
方法二:
Bページのライフサイクルにも下記のコードが設定されています。方法の1つは、サイドスリップジェスチャーを直接オフし、アクティブにすることであり、方法の2つは、BがプロトコルUGesture Recognizer Delegateに従い、サイドスリップインタラクティブエージェントを設定し、ジェスチャー方法を書き換えることである。
@property (weak, nonatomic) id<UIGestureRecognizerDelegate> restoreInteractivePopGestureDelegate;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
_restoreInteractivePopGestureDelegate = self.navigationController.interactivePopGestureRecognizer.delegate;
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.delegate = _restoreInteractivePopGestureDelegate;
};
}
#pragma mark -UIGestureRecognizerDelegate
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
return NO;
}
ここでは主にナビゲーションの横滑りを記録する理由を説明します。私たちはUITNavigationControllerベースをカスタマイズすることがあります。中にはサイドスリップジェスチャーの代理店が設置されているかもしれません。ですから、Bインターフェースが現れたら、改めて代理をBに設定します。消える前に、代理を元に戻します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。