iOSサイドスリップ禁止ジェスチャーの要点解析


プロジェクトによっては、いくつかのページでボタンを返すにはユーザー定義が必要かもしれません。戻るボタンをクリックして、ある判断を下すか、またはコントローラに直接popを与える場合、横滑りを無効にしてジェスチャーに戻る必要があります。判断されたコードが元のインターフェースに戻らないようにしてください。
インターネットでいくつかの資料を探しましたが、大体の方法は二つありますが、注意すべき点は言及されていません。間違いやすいです。ここで整理してください。
需要: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に設定します。消える前に、代理を元に戻します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。