iOSフルスクリーンジェスチャー

1202 ワード

UIN avigationViewControlのサブクラスを作成し、サブクラスviewDidLoadメソッドに次のコードを書き込み、ナビゲーションコントローラを使用するときにこのサブクラスを使用すればよい.
- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIGestureRecognizer *sysges = self.interactivePopGestureRecognizer;
    sysges.enabled = NO;
    UIView *sysView = sysges.view;
    
    id target = [[sysges valueForKey:@"_targets"] firstObject];
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]init];
    SEL action = NSSelectorFromString(@"handleNavigationTransition:");
    [pan addTarget:[target valueForKey:@"_target"] action:action];
    [sysView addGestureRecognizer:pan];
}

原理はシステムの戻りジェスチャーを手に入れて、システムのジェスチャーの作用のViewを手に入れて、runtimeで私たちが望んでいるtargetactionを見つけて、それからpanジェスチャーをカスタマイズして、システムのtargetとactionを記入してokになりました.なぜ私たちがシステムのものを手に入れてジェスチャーをやり直すことができるのかというと、システムのジェスチャーがジェスチャーの作用範囲を修正したからです.
targetとactionを探して以下のようにします.
    unsigned int count;
    Ivar *ivar = class_copyIvarList([UIGestureRecognizer class], &count);
    for (int i = 0; i < count; i++) {
       NSLog(@"%s", ivar_getName(ivar[i]));
    }