Apple のドキュメントにあるように、ジェスチャを処理するプロセスは次のとおりです。
初期ビューは、イベントまたはメッセージを処理しようとします。イベントを処理できない場合は、イベントをそのスーパービューに渡します。これは、初期ビューがそのビュー コントローラーのビュー階層の最上位のビューではないためです。
スーパービューはイベントの処理を試みます。スーパービューがイベントを処理できない場合、スーパービューはまだビュー階層の最上位ビューではないため、イベントをスーパービューに渡します。
ビュー コントローラーのビュー階層の最上位のビューが、イベントの処理を試みます。最上位のビューがイベントを処理できない場合、そのビュー コントローラーにイベントを渡します。
ビュー コントローラーはイベントの処理を試み、処理できない場合は、イベントをウィンドウに渡します。
ウィンドウ オブジェクトがイベントを処理できない場合は、イベントをシングルトン アプリ オブジェクトに渡します。
アプリ オブジェクトがイベントを処理できない場合、イベントは破棄されます。
ただし、私の場合、window のルート vc として UITableViewControllerのサブクラスがあり、次のように画面全体をカバーするビューを追加します。
@interface MyTableViewController : UITableViewController()
@end
@implementation MyTableViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];
}
画面にタッチしてパン ジェスチャを生成すると、redView がヒット テスト ビューになると思います。redView はそれを処理できないため、タッチ イベントをそのスーパービューに渡します。 . その結果、テーブルビューはパン ジェスチャを処理しません。ただし、tableView は引き続きパン ジェスチャを処理できますが、誰か説明できますか?